在过去的几个小时里我一直在努力解决这个问题,我找了一个指南。
我有一个更新请求,我想以通用方式编写,这意味着我想获得任何类型的JSON,如一袋属性,并能够在以后的应用程序中使用它。
我面临的问题是,每当我尝试将其作为JSON或String(而不是模型或ResponseBody)时,应用程序崩溃。我认为逮捕是基于我所看到的解码。
这是Retrofit构建器。
public Retrofit getRetrofit(OkHttpClient okHttpClient) {
Retrofit retrofit = new Retrofit
.Builder()
.baseUrl("https://reqres.in/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(MoshiConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
return retrofit;
}
REST界面非常简单。
public interface IRestService {
@GET("api/users?page=2")
Observable<String> queryPage();
}
我也尝试调试这个问题,我添加了我的记录器拦截器,显然不起作用,我不明白为什么:
public OkHttpClient getOkHttpClient(Interceptor requestInterceptor) {
// HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
// loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
HttpLoggingInterceptor loggingInterceptor =
new HttpLoggingInterceptor((msg) -> {
Log.d(HttpLoggingInterceptor.class.toString(), msg);
});
//loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
LoggingInterceptor customLoggingInterceptor = new LoggingInterceptor();
return new okhttp3.OkHttpClient.Builder()
.connectTimeout(CONNECT_TIMEOUT_IN_MS, TimeUnit.MILLISECONDS)
.addInterceptor(requestInterceptor)
.addInterceptor(loggingInterceptor)
.addInterceptor(customLoggingInterceptor)
.build();
}
如果在没有模型的情况下以通用形式获取JSON,我有什么问题,请告诉我。如果我可以就如何调试此类问题获得一些建议,那也将是一个很大的帮助,因为记录器没有在Android Studio中注册任何东西。很抱歉,如果这些问题都不是愚蠢的,但我刚刚开始在Android中构建我的第一个应用程序。我有很多其他语言的经验。
不要在String
(界面)中使用Observable
作为service
,而是使用Object
作为类型。当你获得数据时,你总是可以使用Gson().toJson(body.toString())
将其转换为字符串。此外,很可能你的应用程序崩溃String
因为你没有正确的转换器工厂(标量工厂)。你可以检查this相同。