2

您好,我正在尝试从 Android 应用程序注册用户。我安装了 Xampp,我创建了我的数据库,我创建了一个 php 页面,该页面将被调用以将数据保存在数据库中。当我将 url http://192.168.xx/ah_login_api/放入我的 php 文件时。异常类型:$ android.StrictMode AndroidBlockGuardPolicy.onNetwork 处的“android.os.NetworkOnMainThreadException”

我不明白问题出在哪里!

4

2 回答 2

1

您需要使用AsyncTask来执行所有网络操作。

您的网络操作可能需要很长时间,如果在主 UI 线程上完成,UI 会变得无响应。如果您的 UI 长时间冻结,该应用程序可能会被操作系统杀死。

因此,Android 4+ 强制使用后台线程来执行网络操作。

将代码放入内部进行网络活动doInBackground(),所有 AsyncTask 使用execute().

这是您的 AsyncTask 的样子:

private class MyAsyncTask extends AsyncTask<String, Integer, Void> {
     protected void doInBackground() {
        sendEmail();
 }

 protected void onProgressUpdate() {
    //called when the background task makes any progress
 }

  protected void onPreExecute() {
     //called before doInBackground() is started
 }
 protected void onPostExecute() {
     //called after doInBackground() has finished 
 }
  }

你可以在任何地方使用new MyAsyncTask().execute("");

于 2013-05-08T18:38:54.970 回答
0

您需要将 AsyncTask 用于 newtwork 操作,因为在主线程上运行长时间操作会使您的 ui 滞后,甚至使其无响应。

虽然最好使用 AsyncTask ,但您也可以只使用另一个线程

喜欢 :

Thread xamp = new Thread(){

public void run(){
//Your network operation here
}

};
xamp.start();

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

于 2013-05-08T18:51:52.547 回答