这是界面:
@GET("solicitation/get/{protocol}")
Observable<Solicitation> getProtocol(@Path("protocol") String protocol, @Query("X-Authorization") String apiKey);
这是我的ApiClient
课程,
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient.build())
.build();
这就是我在MainActivity
onCreate
上的称呼方式:
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
apiService.getProtocol("2313868283", getResources().getString(R.string.api_key))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(obSol);
这超出了onCreate
:
Observer<Solicitation> obSol = new Observer<Solicitation>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e(TAG, "onSubscribe" + Thread.currentThread().getName());
}
@Override
public void onNext(@NonNull Solicitation solicitation) {
Log.e(TAG, "onNext: " + solicitation.getName() + " " + Thread.currentThread().getName());
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG, "onError: " + e.toString());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: All Done!" + Thread.currentThread().getName());
}
};
当我运行应用程序时,改造会发挥其魔力,将结果从该api调用和所有内容中拉出来,除非我得到null,我应该得到实际结果:
06-11 12:26:31.691 22760-22760/com.example.ga.myapplication E/lol: onSubscribemain
06-11 12:26:31.704 22760-22798/com.example.ga.myapplication D/OkHttp: --> GET (URL HIDDEN FOR THIS POST) http/1.1
06-11 12:26:31.704 22760-22798/com.example.ga.myapplication D/OkHttp: --> END GET
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication D/OpenGLRenderer: Swap behavior 1
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
06-11 12:26:31.814 22760-22801/com.example.ga.myapplication D/OpenGLRenderer: Swap behavior 0
06-11 12:26:32.054 22760-22760/com.example.ga.myapplication W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
06-11 12:26:32.511 22760-22798/com.example.ga.myapplication D/OkHttp: <-- 200 OK (URL HIDDEN FOR THIS POST) (807ms)
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Date: Sun, 11 Jun 2017 15:40:51 GMT
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Server: Apache/2.4.18 (Ubuntu)
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Origin: *
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Methods: GET, POST, OPTIONS
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Access-Control-Allow-Credentials: true
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Cache-Control: no-cache
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Set-Cookie: XSRF-TOKEN=ADA1ODc0MWRlNWZlOWM0MjJhYWNkMTc1OGZjMzk2ZDhlOGJhNTZlZDRhM2RmN2ZjMzk0NjFmOTdmIn0%3D; expires=Sun, 11-Jun-2017 17:40:51 GMT; Max-Age=7200; path=/
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Set-Cookie: laravel_session=eiUADHiuhsaduihAIUSDVuRWpacDR4Mm5wSzljNnc0YzJ5dFBBQ2NDU5ZTFmYjg3ZmM3ZiJ9; expires=Sun, 11-Jun-2017 17:40:51 GMT; Max-Age=7200; path=/; HttpOnly
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Content-Length: 329
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Keep-Alive: timeout=5, max=100
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Connection: Keep-Alive
06-11 12:26:32.512 22760-22798/com.example.ga.myapplication D/OkHttp: Content-Type: application/json
06-11 12:26:32.514 22760-22798/com.example.ga.myapplication D/OkHttp: {"data":[{"id":5,"name":"Roll D","protocol":"2313868283"}]}
06-11 12:26:32.514 22760-22798/com.example.ga.myapplication D/OkHttp: <-- END HTTP (329-byte body)
06-11 12:26:32.520 22760-22760/com.example.ga.myapplication E/lol: onNext: null main
06-11 12:26:32.520 22760-22760/com.example.ga.myapplication E/lol: onComplete: All Done!main
修改:
为了让它更清晰一点,这就是调用onNext:
Log.e(TAG, "onNext: " + solicitation.getName() + " " + Thread.currentThread().getName());
这是日志:
06-11 12:26:32.520 22760-22760/com.example.ga.myapplication E/lol: onNext: null main
答案 0 :(得分:1)
它是null
,因为webservice返回的JSON无法映射到您的Solicitation
类。
查看记录的JSON,您需要将Solicitation
替换为以下类:
class ApiResponse {
List<Solicitation> data;
}
由于API返回包含Solicitation
列表的对象。