package cn.darkal.networkdiagnosis.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import net.lightbody.bmp.core.har.HarCookie; import net.lightbody.bmp.core.har.HarEntry; import net.lightbody.bmp.core.har.HarLog; import net.lightbody.bmp.core.har.HarNameValuePair; import net.lightbody.bmp.core.har.HarRequest; import net.lightbody.bmp.core.har.HarResponse; import butterknife.BindView; import butterknife.ButterKnife; import cn.darkal.networkdiagnosis.R; import cn.darkal.networkdiagnosis.SysApplication; /** * Created by xuzhou on 2016/8/10. * Har详情 */ public class HarDetailActivity extends AppCompatActivity { @BindView(R.id.ll_detailLayout) LinearLayout linearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scrolling); ButterKnife.bind(this); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); setupActionBar(); try { initHarLog(getIntent().getIntExtra("pos", -1)); } catch (Exception e) { e.printStackTrace(); finish(); } } public void initHarLog(int pos) { HarLog harLog = ((SysApplication) getApplication()).proxy.getHar().getLog(); HarEntry harEntry = harLog.getEntries().get(pos); HarRequest harRequest = harEntry.getRequest(); HarResponse harResponse = harEntry.getResponse(); addItem("Overview"); addItem("URL", harRequest.getUrl()); addItem("Method", harRequest.getMethod()); addItem("Code", harResponse.getStatus() + ""); addItem("TotalTime", harEntry.getTime() + "ms"); addItem("Size", harResponse.getBodySize() + "Bytes"); if (harRequest.getQueryString().size() > 0) { addItem("Request Query"); for (HarNameValuePair pair : harRequest.getQueryString()) { addItem(pair.getName(), pair.getDecodeValue()); } } addItem("Request Header"); for (HarNameValuePair pair : harRequest.getHeaders()) { // 不显示cookie if (!pair.getName().equals("Cookie")) { addItem(pair.getName(), pair.getDecodeValue()); } } if (harRequest.getCookies().size() > 0) { addItem("Request Cookies"); for (HarCookie cookie : harRequest.getCookies()) { addItem(cookie.getName(), cookie.getDecodeValue()); } } if (harRequest.getPostData() != null) { addItem("Request Content"); addItem("PostData", harRequest.getPostData().getText()); } addItem("Response Header"); for (HarNameValuePair pair : harResponse.getHeaders()) { if (!pair.getName().equals("Cookie")) { addItem(pair.getName(), pair.getDecodeValue()); } } if (harResponse.getCookies().size() > 0) { addItem("Response Cookies"); for (HarCookie cookie : harResponse.getCookies()) { addItem(cookie.getName(), cookie.getDecodeValue()); } } if ((harResponse.getRedirectURL() != null && harResponse.getRedirectURL().length() > 0) || (harResponse.getContent().getText() != null && harResponse.getContent().getText().length() > 0)) { addItem("Response Content"); } if (harResponse.getRedirectURL() != null && harResponse.getRedirectURL().length() > 0) { addItem("RedirectURL", harResponse.getRedirectURL()); } if (harResponse.getContent().getText() != null && harResponse.getContent().getText().length() > 0) { addContentItem("Content", harResponse.getContent().getText(), pos); } } public void addContentItem(String title, final String value, final int pos) { View view = LayoutInflater.from(this).inflate(R.layout.item_detail, null); TextView textView = (TextView) view.findViewById(R.id.tv_title); textView.setText(title); TextView valueTextView = (TextView) view.findViewById(R.id.tv_value); if (TextUtils.isEmpty(value)) { valueTextView.setText(""); } else { valueTextView.setText(value.substring(0, value.length() > 50 ? 50 : value.length())); } if (title.equals("Content")) { view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (value != null && value.length() > 10) { Intent intent = new Intent(HarDetailActivity.this, JsonPreviewActivity.class); intent.putExtra("pos", pos); HarDetailActivity.this.startActivity(intent); } } }); } linearLayout.addView(view); } public void addItem(String title, final String value) { View view = LayoutInflater.from(this).inflate(R.layout.item_detail, null); TextView textView = (TextView) view.findViewById(R.id.tv_title); textView.setText(title); TextView valueTextView = (TextView) view.findViewById(R.id.tv_value); if (TextUtils.isEmpty(value)) { valueTextView.setText(""); } else { valueTextView.setText(value.substring(0, value.length() > 50 ? 50 : value.length())); } view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (value != null && value.length() > 10) { View textEntryView = LayoutInflater.from(HarDetailActivity.this).inflate(R.layout.alert_textview, null); TextView edtInput = (TextView) textEntryView.findViewById(R.id.tv_content); edtInput.setText(value); AlertDialog.Builder builder = new AlertDialog.Builder(HarDetailActivity.this); builder.setCancelable(true); builder.setView(textEntryView); builder.setPositiveButton("确认", null); builder.show(); } } }); linearLayout.addView(view); } public void addItem(String cateName) { View view = LayoutInflater.from(this).inflate(R.layout.item_cate, null); TextView textView = (TextView) view.findViewById(R.id.tv_catetitle); textView.setText(cateName); linearLayout.addView(view); } /** * Set up the {@link android.app.ActionBar}, if the API is available. */ private void setupActionBar() { setTitle("数据详情"); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { // Show the Up button in the action bar. actionBar.setDisplayHomeAsUpEnabled(true); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } }