检查AsyncTask上的连接

时间:2013-02-04 13:21:44

标签: java android multithreading android-asynctask

我在asynctask之前检查连接和正确的链接,但有时候应用程序崩溃了,我认为在UI线程上做了。如果我把代码放在AsyncTask上,应用程序总会崩溃。任何解决方案?

on onCreate方法:

if(connectionOK())
      {
          try {
                url = new URL(bundle.getString("direccion"));
                con = (HttpURLConnection) url.openConnection();
                if(con.getResponseCode() == HttpURLConnection.HTTP_OK)
                {
                    Tarea tarea = new Tarea(this);
                    tarea.execute();
                }
                else
                {
                    con.disconnect();
                   //show alertdialog with the problem
                    direccionInvalida();
                }
        } catch (Exception e){e.printStackTrace();}

      }
      else
      { 
             //show alertdialog with the problem
             notConnection() 
      }

2 个答案:

答案 0 :(得分:1)

试试这个,检查doInBackground内的网络连接。

public class GetTask extends AsyncTask<Void, Void, Integer> {

    protected void onPreExecute() {
        mProgressDialog = ProgressDialog.show(MainActivity.this,
                "Loading", "Please wait");
    }

    @Override
    protected Integer doInBackground(Void... params) {
        // TODO Auto-generated method stub
                   if(connectionOK()){
        //ADD YOUR API CALL
              return 0;
                  }esle{
                     return 1;
                   }

    }

    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
        if (mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
        } 
                    if(result == 0){
                       //do your stuff
                     }else{
                      //show alertdialog with the problem
                     }

    }
}

答案 1 :(得分:0)

你的问题很模糊!

然而:在较新的机器人中,您无法在UI线程上执行此行:

con = (HttpURLConnection) url.openConnection();

所以一个简单的解决方案是在新线程中添加所有内容:

new Thread() {
    public void run() {
        //add all your code
    }
}.start();

但是,您的代码有一些块来显示对话框(猜测):

//show alertdialog with the problem
notConnection();

这些功能应该在UI线程上完成。所以使用处理程序:

//add this outsire the thread
Handler mHandler = new Handler();

然后在你的代码中使用:

mHandler.post(new Runnable() {
    public void run() {
        notConnection();
    }
});

最后,这是一个修复。真正的解决方案是让你无论如何发布AsyncTask并处理onPostExecute()

中的错误或成功