package org.lntu.online.ui.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.widget.Toolbar;
import android.widget.TextView;
import org.joda.time.DateTime;
import org.lntu.online.R;
import org.lntu.online.model.api.ApiClient;
import org.lntu.online.model.api.CallbackAdapter;
import org.lntu.online.model.storage.LoginShared;
import org.lntu.online.ui.base.StatusBarActivity;
import org.lntu.online.ui.listener.NavigationFinishClickListener;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import butterknife.BindView;
import butterknife.ButterKnife;
public class CrashLogActivity extends StatusBarActivity {
private static final String EXTRA_E = "e";
public static void start(@NonNull Context context, @NonNull Throwable e) {
Intent intent = new Intent(context, CrashLogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Bundle bundle = new Bundle();
bundle.putSerializable(EXTRA_E, e);
intent.putExtras(bundle);
context.startActivity(intent);
}
@BindView(R.id.toolbar)
protected Toolbar toolbar;
@BindView(R.id.tv_info)
protected TextView tvInfo;
private String crashLog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crash_log);
ButterKnife.bind(this);
toolbar.setNavigationOnClickListener(new NavigationFinishClickListener(this));
Throwable e = (Throwable) getIntent().getSerializableExtra(EXTRA_E);
StringBuilder sb = new StringBuilder();
sb.append("生产厂商:\n");
sb.append(Build.MANUFACTURER).append("\n\n");
sb.append("手机型号:\n");
sb.append(Build.MODEL).append("\n\n");
sb.append("系统版本:\n");
sb.append(Build.VERSION.RELEASE).append("\n\n");
sb.append("异常时间:\n");
sb.append(new DateTime()).append("\n\n");
sb.append("异常类型:\n");
sb.append(e.getClass().getName()).append("\n\n");
sb.append("异常信息:\n");
sb.append(e.getMessage()).append("\n\n");
sb.append("异常堆栈:\n");
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
e.printStackTrace(printWriter);
Throwable cause = e.getCause();
while (cause != null) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
}
printWriter.close();
sb.append(writer.toString());
crashLog = sb.toString();
tvInfo.setText(crashLog);
crashLogAsyncTask();
}
private void crashLogAsyncTask() {
ApiClient.service.crashLog(LoginShared.getUserId(this), crashLog, new CallbackAdapter<Void>());
}
}