我一直在努力将JSON对象从android上的应用程序发送到php文件(本地托管)。 php位与我的问题无关,因为wireshark没有记录我的应用程序中的任何活动(在eclipse / ADK中进行模拟),这几乎肯定与我的发送方法有关:
try {
JSONObject json = new JSONObject();
json.put("id", "5");
json.put("time", "3:00");
json.put("date", "03.04.12");
HttpParams httpParams = new BasicHttpParams();
HttpClient client = new DefaultHttpClient(httpParams);
//
//String url = "http://10.0.2.2:8080/sample1/webservice2.php?" +
// "json={\"UserName\":1,\"FullName\":2}";
String url = "http://localhost/datarecieve.php";
HttpPost request = new HttpPost(url);
request.setEntity(new ByteArrayEntity(json.toString().getBytes(
"UTF8")));
request.setHeader("json", json.toString());
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
// If the response does not enclose an entity, there is no need
if (entity != null) {
InputStream instream = entity.getContent();
}
} catch (Throwable t) {
Toast.makeText(this, "Request failed: " + t.toString(),
Toast.LENGTH_LONG).show();
}
我已经从我发现的一个例子中修改了这个,所以我确信我已经采用了一些非常好的代码并将其破坏了。我理解多线程的要求,所以我的应用程序不会挂起并死掉,但我不确定它的实现。使用Asynctask会解决这个问题,还是我错过了其他重要的东西?
感谢您提供任何帮助。
答案 0 :(得分:1)
你应该使用asynctask或thread,因为在更高版本的android中它不允许像ui线程那样长时间运行任务,如网络操作。
答案 1 :(得分:1)
假设您使用模拟器测试代码,localhost
指的是模拟环境。如果您需要访问计算机上托管的php,则需要使用IP 10.0.2.2或LAN IP,例如192.168.1.3。查看Referring to localhost from the emulated environment
您可以参考Keeping Your App Responsive了解如何在AsyncTask
中运行长时间运行的操作