【发布时间】:2013-07-14 14:54:30
【问题描述】:
我正在尝试从 Android 向 ASP.NET Web API 发出 GET 请求。 API 应该返回一个带有一些用户的 JSON 对象。从浏览器调用 API 时一切正常,但尝试从 Androind 应用程序调用时没有任何反应。我查看了 Fiddler 并没有发送任何请求。
这是我用来拨打电话的代码:
class GetData extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... params){
HttpClient client = new DefaultHttpClient();
HttpResponse response;
try{
HttpGet get = new HttpGet("http://10.0.2.2:38216/api/user");
response = client.execute(get);
if(response != null){
InputStream inStream = response.getEntity().getContent();
String message = convertToString(inStream);
return message;
}
}
catch(Exception exp){
Log.d("Error message!", exp.toString());
}
return null;
}
}
任何关于我做错了什么的想法或提示将不胜感激!
【问题讨论】:
-
只是为了确认一下,您正在模拟器上运行它,并且您的 Web 应用程序正在监听运行该模拟器的开发机器的
localhost?如果是,LogCat 是否显示异常和堆栈跟踪?另外,你确定你正在执行这个任务吗? -
我在模拟器上运行,而 LogCat 没有显示任何内容。此外,我确信任务会被调用,因为我已经查看了调试器并且任务上的断点被命中。还调用了
client.execute(get),但返回的响应没有任何用处,Fiddler 也没有显示对 Web API 的任何调用。 -
"with nothing有用" -- 如果它没有抛出异常,那么响应中有一些有用的东西,比如状态码。
-
好的,所以我再次查看调试,我得到一个状态码 200。这告诉我调用完成了。但是我又看了一眼 Fiddler,那里什么也没显示。为什么从浏览器拨打电话时我看到了它,但当我从 Android 应用程序拨打电话时却没有显示?我错过了什么吗?
-
“我错过了什么吗?” - 是的,您在 Fiddler 中缺少输出。 :-) Fiddler 是否在端口
38216上运行?还是您在 Web 浏览器中将 Fiddler 设置为代理,而端口38216是 Web 应用程序本身?