Saya memiliki layanan sederhana ini di server saya di http://192.168.1.12:8080/api/hooray sebuah>:
router.route('/hooray/')
.get(function (req, res) {
res.status(200).send({ result: true, message: "hooray" })
})
Ini berfungsi dari Tukang Pos, tetapi dari aplikasi Android saya, saya tidak dapat menjangkau url itu, dan saya tidak tahu alasannya.
Itulah kode (yang disederhanakan):
Antarmuka Layanan
public interface HoorayAPI {
@GET("hooray/")
Observable<HoorayResponse> hooray();
}
Kelas Respons khusus saya: HoreResponse
public class HoorayResponse{
@SerializedName("result")
@Expose
private boolean result;
@SerializedName("message")
@Expose
private String message;
public HoorayResponse(boolean result, String message) {
this.result = result;
this.message = message;
}
// Getter and setter ...
}
Penelepon
public void foo(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.1.12:8080/api/")
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
HoorayAPI service = retrofit.create(HoorayAPI.class);
Observable<HoorayResponse> hoorayObservable = service.hooray();
hoorayObservable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<HoorayResponse>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) { e.printStackTrace(); }
@Override
public void onNext(HoorayResponse response) {
System.out.println("Hooray!!!");
}
});
}
Saat saya memanggil metode foo(), saya mendapatkan kesalahan ini:
retrofit2.adapter.rxjava.HttpException: HTTP 404 Not Found
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError$1.onNext(OperatorMapResponseToBodyOrError.java:43)
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError$1.onNext(OperatorMapResponseToBodyOrError.java:38)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(RxJavaCallAdapterFactory.java:173)
at rx.internal.operators.OperatorSubscribeOn$1$1$1.request(OperatorSubscribeOn.java:80)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OperatorSubscribeOn$1$1.setProducer(OperatorSubscribeOn.java:76)
at rx.Subscriber.setProducer(Subscriber.java:205)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:152)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:138)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:8460)
at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:776)
Saya tidak tahu karena kesalahannya: HTTP 404 Not Found. Layanan itu dapat dijangkau dan berfungsi. Saya menulis API layanan untuk login dengan cara yang sangat mirip dengan HoorayAPI, dengan metode POST, dan berhasil. Mengapa ini tidak berhasil di sini? Maksudku, kodenya sepertinya benar.