无法一次运行多个Asynctask

时间:2014-12-09 02:43:01

标签: android tcp android-asynctask

我正在编写一个像客户端一样使用Android手机并通过TCP Socket连接到java服务器的应用程序。

我的问题是:我使用服务发送/接收消息到带有asynctask的java服务器以保持连接,但是当我需要发送请求并等待服务器的响应时,我使用另一个asynctask来执行此操作,但是第二个asynctask无法运行。 这是我的代码

服务器中的异步任务(连接 - 保留接收方消息)

public class connectTask extends AsyncTask<String,String,TCPClient> {

            @Override
            protected TCPClient doInBackground(String... message) {
                Log.d(TAG1,"connectTask - in asycn task- 3");
                //we create a TCPClient object and
                mmTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
                    @Override
                    //here the messageReceived method is implemented
                    public void messageReceived(String message) {
                        //this method calls the onProgressUpdate
                        Log.d(TAG1,"connectTask - in asycn task- 4");
                        publishProgress(message);
                    }
                });
                if (LocalData.isConnectsuccess == false)
                {
                try {
                     Log.d(TAG1,"connectTask - in asycn task- 5");                  
                     mmTcpClient.run("172.16.10.37", 44444);
                Log.d(TAG1,"Services started - in asycn task- 6");
                }
                catch (Exception e)
                {
                    Log.e(TAG1,""+e);
                }
                }
                return null;
            }

            @Override
            protected void onProgressUpdate(final String... values) {
                super.onProgressUpdate(values); 
                Log.e(TAG1,"Onprogressupdate" + values[0]);
                LocalData.strreceiver = values[0];
                Intent intt = new Intent(ConnectService.this, Customdialog.class);
                intt.putExtra("mess", LocalData.strreceiver);
                intt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
               startActivity(intt);            
            }
        }

用于登录活动的第二个asynctask

class ASlogin extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(SigninActivity.this);
            pDialog.setMessage("Logging in");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
            Log.d(Tag2, "pdialog show");
        }

        /**
         * getting All products from url
         * */
        protected String doInBackground(String... message) {
            // Building Parameters
            Log.d(Tag2, "Doinbackground");
            try {
                if (LocalData.isConnectsuccess == true) {
                    Log.d(Tag2, "Send-1");
                    JSONObject jslogin = new JSONObject();
                    try {
                        jslogin.put("tag","login");
                        jslogin.put("email", edtEmailSignIn.getText().toString());
                        jslogin.put("password", edtPasswordSignIn.getText()
                                .toString());
                        Log.d(Tag2, "Put Json-2");
                    } catch (JSONException e) {                     
                        Log.e(Tag2, "JSON failed" + e);
                    }
                    mTcpClient.sendMessage(jslogin.toString());
                    Log.d(Tag2, "JsonString: " + jslogin.toString());                       
                }
                else {
                    Log.e(Tag2, "Connect not success" + LocalData.isConnectsuccess);
                }
            } catch (Exception e) {
                Log.e(Tag2, "Fail parse Json" + e);
            }
            return null;
        }
        @Override
        protected void onProgressUpdate(String... message) {
            super.onProgressUpdate(message);
            pDialog.dismiss();
            OJResponsive strreturn = new OJResponsive();
            try{
                strreturn = JSonparse.getrespon(LocalData.strreceiver);
            }
            catch (Exception e)
            {
                alertmess("Login fail" + e);
                Log.e(Tag2,"Json parse failed"+e);
            }

                    if (strreturn.getResult()=="success")
                    {
                        Toast.makeText(SigninActivity.this, "Login success", Toast.LENGTH_SHORT).show();
                        Intent inhctr = new Intent(SigninActivity.this,HomeControlActivity.class);
                        startActivity(inhctr);
                         finish();
                    }
                    else alertmess("Login fail");
                    Log.e(Tag2,"Login fail"+e);
        }

    }

第二个asycntask只在onPreExecute()上运行并在showprocessdialog处停止。 那对我有什么帮助?或者在这种情况下有什么更好的解 谢谢你。

2 个答案:

答案 0 :(得分:0)

尝试使用

AsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

代替

答案 1 :(得分:-1)

在不同版本的android中,AsyncTask执行的处理方式不同。

看看这个答案:fetching data in parallel