我正在开发一个移动应用程序,我正在使用它来使用AsyncTask
从我的API获取数据。问题是,当应用程序尝试连接到API时,我收到以下异常。
> Caused by: java.lang.IllegalStateException: Target host must not be
> null, or set in parameters. scheme=null, host=null,
> path=api.mywebsite.net/test
我认为这与我的网址中缺少http://
有关,但即使我添加它,它也会显示上述异常。
这就是我创建HTTP请求的方式:
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = null;
HttpGet httpGet = new HttpGet("api.mywebsite.net/test");
httpResponse = httpClient.execute(httpGet);
感谢您的帮助。
更新:从浏览器调用或通过我正在使用的某个REST测试工具访问时,原始网址返回有效json
。在Chrome通过开发人员工具进一步检查request
标头后,我发现请求的请求网址部分确实有http://
。
答案 0 :(得分:1)
我认为这需要改变:
HttpGet httpGet = new HttpGet("http://www.api.mywebsite.net/test");
答案 1 :(得分:0)
java.lang.IllegalStateException:目标主机不能为null或set 在参数中。 scheme = null,host = null,path = api.fuelupapp.net / test
要解决此问题,您必须在网址中添加http://
前缀。
此外,如果您对ui线程进行网络操作,您将获得Exception on NetworkTask:android.os.NetworkOnMainThreadException
我刚用下面的代码试过你的情况并且它有效。 new NetworkTask().execute();
private static class NetworkTask extends
AsyncTask<Void, Void, HttpResponse> {
@Override
protected HttpResponse doInBackground(Void... params) {
HttpResponse httpResponse = null;
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://api.fuelupapp.net/test");
httpResponse = httpClient.execute(httpGet);
} catch (Exception e) {
Log.d("NetworkTask", "Exception on NetworkTask:" + e);
}
return httpResponse;
}
@Override
protected void onPostExecute(HttpResponse httpResponse) {
super.onPostExecute(httpResponse);
if(httpResponse != null) {
Log.d("NetworkTask", "NetworkTask response received");
} else {
Log.d("NetworkTask", "NetworkTask error occured");
}
}
}
答案 2 :(得分:0)
显然这是我自己的错。我没有在INTERNET
中启用AndroidManifest
权限,偷偷摸摸的Android没有向我显示这是一个错误。
无论如何,请确保在清单文件中启用<uses-permission android:name="android.permission.INTERNET"></uses-permission>
。