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

改型-Android.os.NetworkonMaintHreadException

夏新翰
2023-03-14

我正在使用Reverfit2获取json并将其解析为POJO。我的目的是获取该对象的一个值。

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

我的REST客户端:

public interface MyClient {

    @GET("/part1/part2")
    Call<MyItem> getMyItem(@Query("param1") String param1,
                                                 @Query("param2") String param2,
                                                 @Query("param3") String param3);

}

在这里我找到了创建服务的很棒很棒的工具:

public class ServiceGenerator {

    public static final String API_BASE_URL = "http://my.api.com";

    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());

    public static <S> S createService(Class<S> serviceClass) {
        Retrofit retrofit = builder.client(httpClient.build()).build();
        return retrofit.create(serviceClass);
    }
}
MyClient api = ServiceGenerator.createService(MyClient.class);
        Call<MyItem> call = api.getMyItem(param1, param2, param3);
        MyItem myItem= null;
        try {
            myItem= call.execute().body();
            Log.d("MyTag", myItem.getValue());
        } catch (IOException e) {
            e.printStackTrace();
        }

共有1个答案

郑博
2023-03-14

我以为改造会自动完成后台线程的工作。

如果您使用异步版本-enqueue,就会出现这种情况。您使用的是同步版本,它在调用线程上运行。

改为这样称呼:

MyClient api = ServiceGenerator.createService(MyClient.class);
Call<MyItem> call = api.getMyItem(param1, param2, param3);
call.enqueue(new Callback<MyItem>() {
    @Override
    public void onResponse(Call<MyItem> call, Response<MyItem> response) {
        MyItem myItem=response.body();
    }

    @Override
    public void onFailure(Call<MyItem> call, Throwable t) {
        //Handle failure
    }
});
 类似资料:
  • NullPointerException且未连接适配器;每次我在GennMotion上测试此应用程序时,都会跳过布局。我读过与同一问题相关的其他问题,但没有任何帮助。 logcat 09-20 13:21:13.7384658-4658/com。实例基兰。detailapp E/AndroidRuntime:致命异常:主进程:com。实例基兰。detailapp,PID:4658 java。lan

  • 我有工作的OkHttp:

  • 我使用两种拦截器,一种是HttpLoggingInterceptor,另一种是我的自定义授权拦截器 我正在使用下面更新的改造版本库, 下面是代码 当我试图执行下面的代码时,在名为SynsynizationManager.kt的文件中,它会给我一个错误。 我的规则资源服务类在这里 调试后,我发现当调用下面的函数时,我得到了一个异常 我有以下错误 下面是屏幕截图,你们可以看到,我得到了文件的输出,但不

  • 错误是: 方法引发了'java.lang.NullPointerException'异常。无法计算pl.netizens.eonbeacon.storage.eonbeaconmodel.ToString() Eeid,Eeid模型:

  • 我正在使用改型,对于我的应用程序,在基本界面中,我正在使用一个基本URL,就像改型页面所建议的那样,我希望能够从界面外部更改基本URL,以便有一个用于测试的基本URL和一个用于开发的基本URL,并且用户能够在它们之间切换。在java接口内部,所有变量都是最终的,不能更改,而且由于接口不能从封闭接口外部获取变量,我如何在改型中更改它? 这是我的改装界面:

  • 编辑2:我已经用改型拦截器手动修改响应体来完成这个任务。它是有效的,但如果你有任何其他建议,请发布它们:)