2017-08-13 3 views
0

J'ai une AsyncTask qui lit à partir d'une socket. DoInBackground s'exécute pendant que l'activité est ouverte. Je souhaite annuler DoInBackground lorsque l'activité se ferme mais ne peut pas affecter la variable lors du démarrage de la tâche asynchrone. Ma classe est: -Async Tâche incompatible types

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) {} 
    } 

Je déclare une variable et à partir du AsyncTask comme celui-ci.

private DateTimeActivity.receivingData mRecData; 

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

Cela me donne une erreur de type incompatible.

Il dit -

Required DateTimeActivity.receivingData 

Trouvé

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

Toute aide serait appréciée.

Répondre

1

Vous devez d'abord affecter votre variable, puis lancez le AsyncTask:

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