2

我正在尝试使用 Android 应用程序将数据发布到 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
            }
     }
4

3 回答 3

2

-第一件事:你应该使用adb logcat。它将在您的计算机上为您提供手机的实时日志,了解正在发生的事情非常有用。

-我怀疑您是在 Activity 中进行这些调用,在这种情况下,应用程序只是因此而崩溃:它们是防止您这样做的保障措施。必要时会引发错误“主线程上的网络”(如此处)。问题是活动在主线程上运行,主线程也用于 UI。所以当你进行这样的网络调用时,所有的 UI 都会被阻塞,直到函数返回(因为它正在等待网站响应,它可能需要几秒钟,这对你的应用程序的可用性非常不利)。

解决方案是使用AsyncTask。这是一个易于使用的类,它允许您进行异步调用(即不阻塞 UI 的调用)。

于 2012-09-12T11:25:33.947 回答
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);
于 2012-09-12T11:30:34.257 回答
0

您不应该在主线程上执行网络活动。因为它不允许用户在执行网络操作时响应视图。

使用 Asynctask,它会工作。

http://developer.android.com/reference/android/os/AsyncTask.html

尼廷

于 2012-09-12T11:55:35.967 回答