2017-04-18 53 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); 


     } 

} }

相关问题