在 Helpshift 中崩溃 Android
Crash In Helpshift Android
在向 helpshift 发送第一条消息后,我正在关注堆栈。我是 android 的新手,不明白如何调试它。此外,此崩溃发生率为五分之一,因此我不确定如何重现并修复它。
0
java.lang.RuntimeException: An error occured while executing doInBackground()
1
at android.os.AsyncTask.done(AsyncTask.java:300)
2
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
3
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
4
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
5
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
6
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
7
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
8
at java.lang.Thread.run(Thread.java:818)
9
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
10
at android.os.Handler.<init>(Handler.java:200)
11
at android.os.Handler.<init>(Handler.java:114)
12
at com.helpshift.HSApiData.updateUAToken(SourceFile:1260)
13
at com.helpshift.Helpshift.registerDeviceToken(SourceFile:641)
14
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:337)
15
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:331)
16
at android.os.AsyncTask.call(AsyncTask.java:288)
17
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
18
... 4 more
19
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
20
at android.os.Handler.<init>(Handler.java:200)
21
at android.os.Handler.<init>(Handler.java:114)
22
at com.helpshift.HSApiData.updateUAToken(SourceFile:1260)
23
at com.helpshift.Helpshift.registerDeviceToken(SourceFile:641)
24
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:337)
25
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:331)
26
at android.os.AsyncTask.call(AsyncTask.java:288)
27
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
28
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
29
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
30
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
31
at java.lang.Thread.run(Thread.java:818)
发生此崩溃是因为调用是从不包含关联循环程序的线程发生的。要停止此崩溃:
- 创建处理程序线程。
- 使用上述处理程序线程的循环器并创建一个注册处理程序。
- 在寄存器处理程序中进行 API 调用。
在你的异步任务中 -
@Override
protected Void doInBackground(Void... voids) {
HandlerThread handlerThread = new HandlerThread("register-device-token");
handlerThread.start();
new RegisterDeviceTokenHandler(handlerThread.getLooper(), context).post(null);
return null;
}
您的注册设备令牌处理程序 -
private static class RegisterDeviceTokenHandler extends Handler {
private final Context context;
public RegisterDeviceTokenHandler(Looper looper, Context context) {
super(looper);
this.context = context;
}
@Override
public void handleMessage(Message msg) {
Helpshift.registerDeviceToken(context, "hello");
}
}
如有任何其他疑问,请随时通过支持@helpshift.com
与我们联系
在向 helpshift 发送第一条消息后,我正在关注堆栈。我是 android 的新手,不明白如何调试它。此外,此崩溃发生率为五分之一,因此我不确定如何重现并修复它。
0
java.lang.RuntimeException: An error occured while executing doInBackground()
1
at android.os.AsyncTask.done(AsyncTask.java:300)
2
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
3
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
4
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
5
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
6
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
7
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
8
at java.lang.Thread.run(Thread.java:818)
9
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
10
at android.os.Handler.<init>(Handler.java:200)
11
at android.os.Handler.<init>(Handler.java:114)
12
at com.helpshift.HSApiData.updateUAToken(SourceFile:1260)
13
at com.helpshift.Helpshift.registerDeviceToken(SourceFile:641)
14
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:337)
15
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:331)
16
at android.os.AsyncTask.call(AsyncTask.java:288)
17
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
18
... 4 more
19
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
20
at android.os.Handler.<init>(Handler.java:200)
21
at android.os.Handler.<init>(Handler.java:114)
22
at com.helpshift.HSApiData.updateUAToken(SourceFile:1260)
23
at com.helpshift.Helpshift.registerDeviceToken(SourceFile:641)
24
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:337)
25
at notifications.GCMRegisterCheck$RegisteringHelpShiftWithToken.doInBackground(SourceFile:331)
26
at android.os.AsyncTask.call(AsyncTask.java:288)
27
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
28
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
29
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
30
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
31
at java.lang.Thread.run(Thread.java:818)
发生此崩溃是因为调用是从不包含关联循环程序的线程发生的。要停止此崩溃:
- 创建处理程序线程。
- 使用上述处理程序线程的循环器并创建一个注册处理程序。
- 在寄存器处理程序中进行 API 调用。
在你的异步任务中 -
@Override
protected Void doInBackground(Void... voids) {
HandlerThread handlerThread = new HandlerThread("register-device-token");
handlerThread.start();
new RegisterDeviceTokenHandler(handlerThread.getLooper(), context).post(null);
return null;
}
您的注册设备令牌处理程序 -
private static class RegisterDeviceTokenHandler extends Handler {
private final Context context;
public RegisterDeviceTokenHandler(Looper looper, Context context) {
super(looper);
this.context = context;
}
@Override
public void handleMessage(Message msg) {
Helpshift.registerDeviceToken(context, "hello");
}
}
如有任何其他疑问,请随时通过支持@helpshift.com
与我们联系