2017-08-13 140 views
0

我有一个从套接字读取的AsyncTask。 DoInBackground在活动打开时运行。我想在活动关闭时取消DoInBackground,但在启动AsyncTask时无法分配变量。 我的类是: -异步任务不兼容类型

private class receivingData extends AsyncTask<String, Void, String> { 

     private volatile boolean exit = false; 
     DataInputStream in; 

     byte[] fullBuffer = new byte[7]; 
     byte[] buffer = new byte[100]; // buffer store for the stream 
     int bytes; // bytes returned from read() 
     int bytesCount = 0; 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       if (socket.isConnected()) { 
        in = new DataInputStream(socket.getInputStream()); 
        //Log.d(TAG,"In async receive data run, connected"); 
       } 
      }catch(Exception e){ 
       Log.d(TAG, "in async receiveData - run exception - " + e.toString()); 
      } 
      while(!exit){ 
       try { 
        bytes = in.read(buffer);  // Get number of bytes and message in "buffer" 
        System.arraycopy(buffer,0,fullBuffer,bytesCount,bytes); 
        bytesCount = bytesCount + bytes; 
        if(bytesCount >= 7) { 
         hdt.obtainMessage(RECEIVED_MESSAGE, bytesCount, -1, fullBuffer).sendToTarget();  // Send to message queue Handler 
         Log.d("DTA Read - ", "Message sent"); 
         bytesCount = 0; 
         Log.d("DTA Read - ", "bytesCount re-set"); 
        } 
       }catch(Exception e){ 
        Log.d(TAG, "Read Error - " + e.toString()); 
       } 
      } 
      return "Executed"; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
     } 

     @Override 
     protected void onPreExecute() {} 

     @Override 
     protected void onProgressUpdate(Void... values) {} 
    } 

我声明了一个变量,启动的AsyncTask这样。

private DateTimeActivity.receivingData mRecData; 

// start async task to receive data 
     mRecData = new DateTimeActivity.receivingData().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

这给了我一个不兼容的类型错误。

它说 -

Required DateTimeActivity.receivingData 

找到

android.os.asyncTask <java.lang.string, java.lang.void, ava.lang.string> 

任何帮助,将不胜感激。

回答

1

您需要首先分配您的变量,然后启动的AsyncTask:

// start async task to receive data 
    mRecData = new DateTimeActivity.receivingData(); 
    mRecData.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);