0

我正在使用带有 OKhttp2.0.0-RC2 和 Okio 的 Retrofit android 最新版本 1.6

在此处输入图像描述

当我调用 Post 方法时,此Json 生成器 URL调用代码在状态码 200 下工作正常(即它调用 success(..) 方法,解析 json 一切正常!

杰森:

{
    "responseCode": "200",
    "responseMessage": "OK",
    "responseDetail": {
        "surname": "Trevor",
        "forename": "Ross",
        "dob": "10101960",
        "appRefNo": "1258866",
        "result": "Success"
    }
}

代码:字符串 hostUrl=在此处输入图像描述

void doTrackRef(Map<String, String> paramsref2) {
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(hosturl)

.setLogLevel(RestAdapter.LogLevel.FULL) .setErrorHandler(new MyErrorHandler()).build();

    TrackerRefRequest userref = restAdapter.create(TrackerRefRequest.class);
    userref.login(paramsref2,
            new Callback<TrackerRefResponse>() {
                @Override
                public void success(
                        TrackerRefResponse trackdetailresponse,
                        Response response) {

                    Toast.makeText(TrackerActivity.this, "Success",
                    Toast.LENGTH_SHORT).show();

                }

                @Override
                public void failure(RetrofitError retrofitError) {


                    Toast.makeText(TrackerActivity.this, "No internet",
                        Toast.LENGTH_SHORT).show();
                }


            });
}

MyErrorHandler 类:

class MyErrorHandler implements ErrorHandler {
      @Override public Throwable handleError(RetrofitError cause) {
        Response r = cause.getResponse();
        if (r != null && r.getStatus() == 401) {
          return new Throwable(cause);
        }
        return cause;
      }
    }

}

波乔:

public class TrackerRefResponse {

private String responseCode;

private String responseMessage;

private ResponseDetail responseDetail;

//Setters and Getters


}

上面的代码 100% 工作一切都很好。

问题: 当我将 Json url api 更改为 IP 编号的数字 URL 时:在此处输入图像描述

我收到此错误日志:

 D/Retrofit(9114): ---> HTTP POST http://[IP-Address]/api/index.php/data/TrackerInfo
 D/Retrofit(9114): Content-Type: application/x-www-form-urlencoded; charset=UTF-8
 D/Retrofit(9114): Content-Length: 22
 D/Retrofit(9114): app_ref_no=E0000000001
 D/Retrofit(9114): ---> END HTTP (22-byte body)
 D/dalvikvm(9114): GC_FOR_ALLOC freed 224K, 7% free 4667K/4996K, paused 2ms, total 4ms
D/Retrofit(9114): ---- ERROR http://[IP-Address]/api/index.php/data/TrackerInfo
D/Retrofit(9114): java.net.UnknownHostException: host == null
D/Retrofit(9114):     at com.squareup.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
D/Retrofit(9114):     at com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:231)
D/Retrofit(9114):     at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
D/Retrofit(9114):     at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:317)
D/Retrofit(9114):     at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
D/Retrofit(9114):     at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:420)
D/Retrofit(9114):     at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:105)
D/Retrofit(9114):     at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:239)
D/Retrofit(9114):     at retrofit.client.UrlConnectionClient.prepareRequest(UrlConnectionClient.java:68)
D/Retrofit(9114):     at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:37)
D/Retrofit(9114):     at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321)
D/Retrofit(9114):     at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
D/Retrofit(9114):     at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
D/Retrofit(9114):     at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
D/Retrofit(9114):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
D/Retrofit(9114):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
D/Retrofit(9114):     at retrofit.Platform$Android$2$1.run(Platform.java:142)
D/Retrofit(9114):     at java.lang.Thread.run(Thread.java:841)
D/Retrofit(9114): ---- END ERROR

更新:

此问题已通过接受的答案解决!

4

1 回答 1

4

0Android 的URI类不喜欢192.168.100.06. 将其替换为规范的 IP 地址192.168.100.6,您就可以了。

我向 AOSP 问题跟踪器报告了这个错误。我不是 100% 确定他们会修复它。使用非规范主机名存在主​​要缺点。

于 2014-06-21T03:20:03.727 回答