通过Android应用将数据发布到网址

时间:2012-09-12 11:05:32

标签: android eclipse url post

我正在尝试使用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
            }
     }

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

正如您在LogCat中看到的那样,错误是NetworkOnMainThreadException。

哪个Android在此http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html表示:

NetworkOnMainThreadException:

  

应用程序尝试执行时抛出的异常   主线程上的网络操作。        仅针对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

尼西