【发布时间】:2018-02-22 23:55:33
【问题描述】:
我试图在MyFirebaseMessagingService 类的onMessageReceived 中显示一条警报消息,但我收到了一个错误:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.app.Activity.<init>(Activity.java:846)
at android.support.v4.app.SupportActivity.<init>(SupportActivity.java:38)
at android.support.v4.app.BaseFragmentActivityApi14.<init>(BaseFragmentActivityApi14.java:28)
at android.support.v4.app.BaseFragmentActivityApi16.<init>(BaseFragmentActivityApi16.java:34)
at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java:67)
at android.support.v7.app.AppCompatActivity.<init>(AppCompatActivity.java:61)
at com.dopay.onboarding.activity.BaseActivity.<init>(BaseActivity.java:51)
at com.dopay.onboarding.FMS.MyFirebaseMessagingService.onMessageReceived(MyFirebaseMessagingService.java:75)
at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(Unknown Source)
at com.google.firebase.iid.zzc.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
02
我尝试过的。
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().size() > 0) {
BaseActivity baseActivity = new BaseActivity();
baseActivity.showDialog();
}
}
基础活动
public void showDialog(){
this.runOnUiThread(new Runnable() {
public void run() {
//Toast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();
DialogUtil.showAlert(getApplicationContext(), R.string.message_complete_required_fields);
}
});
}
DialogUtil
public static void showAlert(Context context, int messageId) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(messageId)
.setCancelable(true)
.setPositiveButton(context.getResources().getString(R.string.label_ok), null);
builder.create().show();
}
关于如何在 onMessageReceived 中打开警报对话框的任何建议。
谢谢 回复
【问题讨论】:
-
我很确定,即使你奇迹般地通过了这个问题,你也会在这里得到一个
NullPointerException-getApplicationContext()。您不能(当然可以,但它不会有所需的行为)自己实例化Activity实例并期望它们与实例化Activity的框架一样工作。 -
好的,正确的做法是什么。
-
我个人不会。我会向系统托盘发送通知,这是发送通知的正确方式。
-
能否请您发布 SupportActivity.java 的第 38 行代码
-
@CaoMinhVu SupportActicity 属于“android.support.v4.app”包。如果你想要那条线在这里。第 38 行 - 公共类 SupportActivity 扩展 Activity 实现 LifecycleOwner {
标签: android firebase-cloud-messaging android-alertdialog java-threads android-thread