2017-04-18 57 views
1

我需要從ASyncTask的onPostExecute()方法調用新活動,但上下文返回null。無法從asyncTask調用第二個活動

public class ImageDownloadTask extends AsyncTask<String,Void,ArrayList<String>> { 


public final String search = "https://www.google.co.in/search?&tbm=isch&q="; 
public final String searchAlbum = "album+art"; 
ArrayList<String> arrayList=new ArrayList<String>(); 
ArrayList<String> urlList=new ArrayList<String>(); 
Context context; 
@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 

@Override 
protected ArrayList<String> doInBackground(String... urls) { 
    System.out.println(urls.length); 

    arrayList.clear(); 
    urlList.clear(); 

    for(int i=0;i<urls.length;i++) { 
     String url = urls[i]; 
     String finalUrl = search + url + searchAlbum; 

     try { 
      //Log.i("URL", finalUrl); 
      urlList.add(finalUrl); 

      Document document = Jsoup.connect(finalUrl).get(); 

      String result = document.toString(); 

      //Pattern pattern = Pattern.compile("<img class=\"rg_ic rg_i\" data-src=\"(.*?)\" data-sz"); 

      Pattern newPattern = Pattern.compile("\"ou\":\"(.*?)\",\"ow\""); 

      //Matcher m = pattern.matcher(result); 

      Matcher newMatcher = newPattern.matcher(result); 

      if(newMatcher.find()) 
       arrayList.add(newMatcher.group(1)); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    System.out.println("Printing Images"); 
    System.out.println(urlList); 
    System.out.println(arrayList); 

    return arrayList; 
} 

@Override 
protected void onPostExecute(ArrayList<String> strings) { 
    if(context!=null) { 
    Intent i = new Intent(context,MusicPlayerActivity.class).putExtra("arrayImages",arrayList); 
    context.startActivity(i);} 
    else 
     Log.i("Context","NULL"); //Check why it is null***** 
    super.onPostExecute(strings); 
    } 
} 

輸出爲上下文:NULL。

爲什麼它是空的,我試圖做一個類型MainActivity和活動的變量,但都沒有解決問題。

謝謝你的時間。

+3

你從來沒有設置'上下文'是的,它是空的。 –

+0

我該如何在意圖中使用它。 –

+0

非活動的「上下文」。也許你可以將調用Activity(即託管AsyncTask)傳遞給它? –

回答

1

你宣佈你context變量,但從未將其設置:

Context context; 

所以,是的,它是null當您嘗試並使用它。

您應該在嘗試使用它之前填充它 - 可能會傳遞一個引用到調用Activity或類似的地方。

0

將這個ImageDownloadTask您的活動裏面,那麼你可以使用下面的代碼

new MyTask().execute(urls); 

和你叫它ImageDownloadTask功能改變onPostExecute這一個

@Override 
     protected void onPostExecute(ArrayList<String> strings) { 
      super.onPostExecute(strings); 
      Intent i = new Intent(YourActivityName.this, MusicPlayerActivity.class).putExtra("arrayImages", strings); 
      startActivity(i); 


     } 

} }

相關問題