2017-03-27 51 views
-2

我知道這個問題以前有人問,我已經看了:如何通過價值從onPostExecute

How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?

how do i send data back from onPostExecute in an AsyncTask?

how to pass the result of asynctask onpostexecute method into the parent activity android

我試圖創建一個接口傳遞值,我也嘗試創建一個方法來通過我的onPostExecute賦值,最後我試圖直接設置下面的變量,但似乎沒有任何工作。

public class ClassName extends AppCompatActivity { 
    private Bitmap bit; 

    public void methodName() { 
     new RetrieveFavIcon().execute("https://www.google.com"); 
     // work with 'bit' value, but bit value is null, why? 
    } 

    class RetrieveFavIcon extends AsyncTask<String, Void, Bitmap> { 
    public TaskListener delegate = null; 

    protected Bitmap doInBackground(String... urls) { 
     try { 
      URL url = new URL(new URL(urls[0].trim()), "/favicon.ico"); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      Bitmap myBitmap = BitmapFactory.decodeStream(input); 
      return myBitmap; 
     } catch (IOException e) { 
      Log.d("URL return", "failed"); 
      e.printStackTrace(); 
      return null; 
     } 
    } 

    protected void onPostExecute(Bitmap bm) { 
     if(bm != null) { 
      bit = bm; 
      Log.d("bitmap", "bitmap not null"); 
     } 
    } 
} 
+0

任何解釋這是爲什麼越來越downvotes? –

+0

試試這個,http://android-er.blogspot.de/2013/09/implement-callback-function-with.html –

回答

1

您可以使用接口。當Async任務將達到postExecute比接口將實現接口的回調類。界面可以把結果帶到課堂上。

創建界面如下圖所示:

public interface AsyncResponse { 
void processFinish(String output); 
} 

processFinish()的參數應根據您要發送到MainActivity數據。

實現它在MainActivity:

public class Home extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener, AsyncResponse 

您需要通過接口的AsyncTask:

new AsyncTask(this, MainActivity.this, news).execute(); 

聲明接口的對象中的AsyncTask類。在postExecute

public Cover(AsyncResponse delegate, Context context, ArrayList<NewsWrapper>  list) { 
    this.delegate = delegate; 
} 

現在:在MainActivity

delegate.processFinish(/*Your Data which you want to send in MainActivity*/); 

控接口方法processFinish():分配從MainActivity傳遞接口,這個對象

@Override 
public void processFinish(/*sent data from AsyncTask*/) { 
    /*Use result here*/ 
} 
+0

我看着那個,並嘗試使用接口,它沒有工作 –