APIが呼び出されるたびにFirebase Cloud Messagingサービスを使用して自分のサーバから通知を受けるアプリがあります。私はそれが私のプロジェクトディレクトリからアプリのデバッグを取って、手動でインストールすると、それは私にエラーを与えるFCM onTokenRefresh()Looper.prepare()を呼び出していないスレッド内でハンドラを作成できません
Can't create handler inside thread that has not called Looper.prepare()
私はデバイスが私のデバイスに直接インストールされているAndroidのスタジオのランメニューを通じてインストールする
私の方法では、onTokenRefresh()
メソッド内のvolleyライブラリを使用してデータベースにデータを送信しているというエラーが表示されます。
私はそのメソッドをFirebaseInstanceIdServiceを拡張するサブセッサートにしています。
これは私が私のコードで何が悪かったのか任意の手掛かりを持っていけない、完全なエラーメッセージ
E/AndroidRuntime: FATAL EXCEPTION: pool-3-thread-1
Process: proizzy.com.qrcodeproizzyadm, PID: 5704
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.widget.Toast$TN.<init>(Toast.java:645)
at android.widget.Toast.<init>(Toast.java:137)
at android.widget.Toast.makeText(Toast.java:440)
at proizzy.com.qrcodeproizzyadm.Notification.FirebaseInstanceIDService.onTokenRefresh(FirebaseInstanceIDService.java:25)
at com.google.firebase.iid.FirebaseInstanceIdService.zza(Unknown Source)
at com.google.firebase.iid.FirebaseInstanceIdService.zzm(Unknown Source)
at com.google.firebase.iid.zzb$2.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
です。
これは、サービスクラスの私の完全なコード
public class FirebaseInstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
final String token = FirebaseInstanceId.getInstance().getToken();
Log.v("tok", token);
String tokUrl = "someurl.php";
JsonObjectRequest regToken = new JsonObjectRequest(Request.Method.POST, tokUrl, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.v("success", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.v("errorvolley", error.getMessage());
}
}){
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("token", token);
return params;
}
};
RequestQueue regQueue = Volley.newRequestQueue(getApplicationContext());
regQueue.add(regToken);
}
おそらく、あなたはバックグラウンドスレッドからUIを変更しています。あなたは? – Prashant
@Prashant私didnt、私はアンドロイドスタジオアプリを実行し、それをテストし、それをアンインストールし、私は私のデバイスに手動でインストールされたデバッグアプリをコピーした私にエラーを与えた。 –