当前位置: 首页 > 知识库问答 >
问题:

最终的OkHttpClient客户端=new OkHttpClient()的多线程问题;

易波涛
2023-03-14
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();
                }
            }
        }); 
    }
}

斯塔克特莱斯

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

请求密钥:01-26 05:16:09.564:W/glsuser(2025):java.io.ioException:无效的设备密钥响应。01-26 05:16:09.564:W/Glsuser(2025):at

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:W/glsuser(2025):at kmo.run(:com.google.android.gms:450)01-26 05:16:09.564:W/glsuser(2025):at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1133)01-26 05:16:09.564:W/glsuser(2025):at java.util.concurrent.threadpoolexecutor$worker.run ID.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):向StartTracking提供了无效的newTask。

共有1个答案

贡建修
2023-03-14

首先,添加一些日志记录,以便更好地了解发生了什么。例如,你曾经从Firebase得到过令牌吗?我怀疑不是。

其次,不要创建自己的线程实例来使用OKHTTP进行异步调用,检查out.enqueue(...callback..)[请参阅OKHTTP。

然而,在这种特殊情况下,我建议创建一个单独的IntentService来将Firebase令牌发送到服务器。这将调用持续时间、错误处理等从系统调用中分离到ontokenRefresh()。在IntentServiceonhandleIntent()中,可以使用OKHTTP进行同步调用。保持一切美好和简单。

 类似资料:
  • 问题内容: 我正在使用以下代码创建多个JMS会话,以供多个使用者使用消息。我的问题是代码以单线程方式运行。即使消息存在于队列中,第二个线程也无法接收任何内容,而是继续轮询。同时,第一个线程完成对第一批的处理,然后返回并使用剩余的消息。这里的用法有什么问题吗? 问题答案: 您的问题是prefetchPolicy。 所有消息都被分派到第一个连接的使用者,当另一个连接时他没有收到消息,因此,如果您有一个

  • 问题内容: 我正在尝试使用我一直在努力的客户端/服务器程序实现多线程。我需要允许多个客户端同时连接到服务器。我目前有4类:客户端,服务器,协议和用于处理线程的工作器。以下代码是我对这些类的拥有的代码: SocketServer类: SocketClient类别: 协议类别: ClientWorker类: 当我运行服务器和客户端时,一切正常。然后,当我尝试运行另一个客户端时,它只是挂在那儿,没有提示

  • 我正在使用java客户端连接到hazelcast集群。每次我连接到集群时,我都会观察到在成员的jvm上创建了大约5个客户机线程。这些线程在被销毁之前会停留大约30-40秒。这些线是什么?如何控制创建的客户端线程数? 我正在使用hazelcast all。3.3.3

  • 我有一个异步gRPC客户端,用于多线程环境。当多个线程通过客户端同时连接到服务时,我看到以下错误流: 请求似乎正在成功完成,但是,这些消息充斥着我的日志,让我感到紧张! 在我的测试中,每个线程创建自己的通道并提交自己的异步请求。无论服务负载如何,都会发生错误。如果客户端在不同的进程中运行,则不会发生错误。 我的设置: Python版本: version: 任何洞察都将不胜感激!

  • 问题内容: 我正在使用Spring Boot应用程序开发应用程序服务器,但是现在我想知道Spring中默认的最大(客户端请求)线程池大小是多少,如何定制该值? 问题答案: 本文向大家介绍Spring的最大(客户端请求)线程池大小相关面试题,主要包含被问及Spring的最大(客户端请求)线程池大小时的应答技巧和注意事项,需要的朋友参考一下 假设您使用的是嵌入式,使用该属性来控制客户端请求线程池的大小

  • 本文向大家介绍python多线程socket编程之多客户端接入,包括了python多线程socket编程之多客户端接入的使用技巧和注意事项,需要的朋友参考一下 Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以使用,如下: 1、客户端 2、SocketServer模块 为了能够让多个客户端同时接入服务并进行通