3

这是在 Android 中发送 POST 数据的可能副本

我使用此代码使用 android 将发布数据发送到服务器

public void postData() {
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.mysite.com/android.php");

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("id", "12345"));
            nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
            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
        }
    } 

但是当我运行这个应用程序时,它会显示这个错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.senddata/com.example.senddata.MainActivity}: android.os.NetworkOnMainThreadException

什么问题?任何人都可以帮忙吗?

4

3 回答 3

4

尝试在 setContentView() 下面的 mainactivityactivity 中使用以下代码,以避免 networkOnmainThread 异常..

if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }

但是,在不阻塞主线程的情况下使用 AsyncTask 在后台线程内执行繁重的操作会很棒!

并参考此链接...

AsyncTask Android 示例

于 2013-08-25T05:21:25.050 回答
1

在 asyntask 的 doInBackground 中使用 asyntask 调用 postData。不要从 mainThread 调用它

于 2013-08-25T05:22:34.947 回答
0

您不能在主线程上执行与网络相关的任务,AsyncTask而是使用 Class

于 2014-02-09T04:55:42.663 回答