我正在尝试使用Android App将数据发布到网址。
URL:
参数: “名字”和“信息”
我使用以下代码但不起作用:
public void onClick(View v) {
// Create a new HttpClient and Post Header
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://comparch2011.appspot.com/");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("name", "DEV"));
nameValuePairs.add(new BasicNameValuePair("message", "AndDev is Cool!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
答案 0 :(得分:2)
- 第一件事:你应该使用adb logcat。它会在您的计算机上为您提供手机的实时日志,了解正在发生的事情非常有用。
- 我怀疑你是在一个Activity中进行这些调用,在这种情况下,应用程序就是因为这样而崩溃:它们是防止你这样做的安全措施。它在必要时(如此处)在主线程上引发错误'网络'。 问题是活动是在主线程上运行的,也就是用于UI的主线程。所以当你进行这样的网络呼叫时,所有的UI都会被阻止,直到函数返回为止(因为它等待网站响应它可能需要几秒钟,这对你的应用程序的可用性非常不利)。
解决方案是使用AsyncTask 。它是一个易于使用的类,允许您进行异步调用(即不阻止UI的调用)。
答案 1 :(得分:0)
正如您在LogCat中看到的那样,错误是NetworkOnMainThreadException。
哪个Android在此http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html表示:
应用程序尝试执行时抛出的异常 主线程上的网络操作。 仅针对Honeycomb SDK或更高版本的应用程序进行此操作。允许定位早期SDK版本的应用程序 在他们的主要事件循环线程上进行联网,但它是非常多的 气馁。
所以请看一下http://developer.android.com/reference/android/os/AsyncTask.html,并注意不应该在UI线程上调用getResponse。
或者您可以更改目标或更改严格策略,如下所示,但我不建议这样做...
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
答案 2 :(得分:0)
您不应在主线程上执行网络活动。因为它不允许用户在执行网络操作时响应视图。
使用Asynctask,它会起作用。
http://developer.android.com/reference/android/os/AsyncTask.html
尼西