2017-01-25 7 views
0

Я пытаюсь отправить токен в свою базу данных. Однако моя база данных не получает никаких токенов. Я узнал, что последний клиент OkHttpClient = новый OkHttpClient() имеет проблемы с потоками. Как это исправить? Я использую последний файл okhttp3 и okio jar.Многопоточная проблема с конечным клиентом OkHttpClient = new OkHttpClient();

MyfirebaseInstanceIDService.java

package ******; 

import android.util.Log; 
import android.widget.Toast; 

import com.google.firebase.iid.FirebaseInstanceId; 
import com.google.firebase.iid.FirebaseInstanceIdService; 

import java.io.IOException; 

import okhttp3.FormBody; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.RequestBody; 

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 
    private static final String TAG = 
     MyFirebaseInstanceIDService.class.getSimpleName(); 

    @Override 
    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String token = FirebaseInstanceId.getInstance().getToken(); 
     sendToken(token); 
    } 

    private void sendToken(String token) { 
     final OkHttpClient client = new OkHttpClient(); 
     RequestBody body = new FormBody.Builder() 
       .add("token",token) 
       .build(); 

     final okhttp3.Request request = new okhttp3.Request.Builder() 
       .url("******") 
       .post(body) 
       .build(); 

     final Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        client.newCall(request).execute(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 

StackTrace

01-26 05:16:09.564: W/GLSUser(2025): [AppCertManager] IOException while 

запрашивает ключ: 01-26 05: 16: 09,564: Вт/GLSUser (2025): java.io.IOException: Недопустимый устройство ключ ответ. 01-26 05: 16: 09,564: Вт/GLSUser (2025): в

eka.a(:com.google.android.gms:271) 
01-26 05:16:09.564: W/GLSUser(2025):   
eka.a(:com.google.android.gms:4236) 
01-26 05:16:09.564: W/GLSUser(2025): at ejz.a(:com.google.android.gms:46) 
01-26 05:16:09.564: W/GLSUser(2025): at ejt.a(:com.google.android.gms:53) 
01-26 05:16:09.564: W/GLSUser(2025): at ejs.a(:com.google.android.gms:111) 
01-26 05:16:09.564: W/GLSUser(2025):at                         com.google.android.gms.auth.account.be. 
legacy.AuthCronChimeraService.b 
(:com.google.android.gms:4052) 
01-26 05:16:09.564: W/GLSUser(2025):atdup.call(:com.google.android.gms:2043) 
01-26 05:16:09.564: W/GLSUser(2025):a  
java.util.concurrent.FutureTask.run(FutureTask.java:237) 

01-26 05: 16: 09.564: Вт/GLSUser (2025): в kmo.run (: com.google .android.gms: 450) 01-26 05: 16: 09.564: W/GLSUser (2025): при java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133) 01-26 05: 16: 09.564 : W/GLSUser (2025): при java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:607) 01-26 05: 16: 09.564: W/GLSUser (2025): at kqt.run (: com.google.android.gms: 17) 01-26 05: 16: 09.564: W/GLSUser (2025): at java.lang.Thread.run (Thread.java:761) 01-26 05:16: 09.572: W/ContentTaskController (2025): Invali d newTask был
предоставлен для запуска.

ответ

0

Прежде всего, добавьте несколько журналов, чтобы лучше понять, что происходит. Например, вы когда-либо получаете токен от Firebase? Я подозреваю, что нет.

Во-вторых, не создавайте свой собственный экземпляр потока для асинхронных вызовов с okhttp, проверьте out.enqueue(..callback..) [см. okhttp. Гораздо меньше хлопот, все трудные дела, связанные с краем.

Однако в данном конкретном случае я предлагаю создать отдельный IntentService для отправки маркера Firebase на ваш сервер. Это отменит длительность вызова, обработку ошибок и т. Д. От системного вызова до onTokenRefresh(). Внутри IntentService onHandleIntent() вы можете сделать синхронный вызов, используя okhttp. Сохраняет все красивое и простое.

 Смежные вопросы

  • Нет связанных вопросов^_^