首页 > 解决方案 > 从堆栈跟踪输出中获取“logcat like”

问题描述

我正在尝试从 App 类中的错误对象中获取完整的异常日志“就像我们在 android studio 中一样”,更具体地说,这是我的 App.java

import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;

/**
 * Created by informatic on 17/03/2018.
 */

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

 Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
            e.printStackTrace();
            StringBuilder massage=new StringBuilder();
     for (int i = 0; i < e.getStackTrace().length; i++) {
         massage.append(e.getStackTrace()[i].toString());
     }
     String s=massage.toString();
     System.out.print(s);
        });
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

在 NullPointerException 之后,这是 Strings将在 Exception 之后包含的内容

android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2469)android.app.ActivityThread.access$1100(ActivityThread.java:151)android.app.ActivityThread$H .handleMessage(ActivityThread.java:1362)android.os.Handler.dispatchMessage(Handler.java:110)android.os.Looper.loop(Looper.java:193)android.app.ActivityThread.main(ActivityThread.java:5551 )java.lang.reflect.Method.invokeNative(Native Method)java.lang.reflect.Method.invoke(Method.java:515)com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:730)dalvik.system.NativeStart.main(Native Method)

但另一方面,logcat 会打印这个

com.automata4.www.sanad E/AndroidRuntime:致命异常:主进程:com.automata4.www.sanad,PID:31429 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.automata4.www.sanad/com. automata4.www.sanad.frontend.activities.home.HomeActivity}:android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 的 java.lang.NullPointerException 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2469)在 android.app.ActivityThread.access$1100(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) 在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android .os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang。reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) at com. dalvik.system.NativeStart.main(Native Method) 处的 android.internal.os.ZygoteInit.main(ZygoteInit.java:730) 原因:com.automata4.www.sanad.frontend.activities.home 处的 java.lang.NullPointerException .HomeActivity.getAndSetUi(HomeActivity.java:48) 在 com.automata4.www.sanad.frontend.activities.home.HomeActivity.onCreate(HomeActivity.java:42) 在 android.app.Activity.performCreate(Activity.java:5310 ) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2381) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2469) 在 android.app.ActivityThread.access$1100(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362)在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang。 reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) at com. dalvik.system.NativeStart.main(本机方法)上的 android.internal.os.ZygoteInit.main(ZygoteInit.java:730)handleLaunchActivity(ActivityThread.java:2469) 在 android.app.ActivityThread.access$1100(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) 在 android.os.Handler.dispatchMessage( Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invokeNative(Native Method)在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:730) 在 dalvik.system.NativeStart.main(Native Method)handleLaunchActivity(ActivityThread.java:2469) 在 android.app.ActivityThread.access$1100(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) 在 android.os.Handler.dispatchMessage( Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invokeNative(Native Method)在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:730) 在 dalvik.system.NativeStart.main(Native Method)151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) 在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android。 internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:730) at dalvik.system.NativeStart.main(Native Method)151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) 在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android。 internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:730) at dalvik.system.NativeStart.main(Native Method)app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal。 os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:730) at dalvik.system.NativeStart.main(Native Method)app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal。 os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:730) at dalvik.system.NativeStart.main(Native Method) 

所以我的问题是有什么方法可以像以前的输出一样从e对象中获取,以便我可以将这个完整的异常发送到我的服务器?

标签: javaandroidexception-handling

解决方案


推荐阅读