我正在尝试通过在我的应用启动时抓取网站来检索一些图片网址和图片文字。然后我想使用我创建的imageTexts和imageURLs数组创建一个ViewPager,这样我就可以将图像显示为可滚动的图库。
我执行网络任务,即获取网页并将HTML解析为AsyncTask(下面的代码中的downloadTask())。
我的问题是,由于这种情况发生在后台,因此在代码尝试显示图像之前没有时间获取和解析数据。当代码命中
时,我得到一个空指针错误新的ViewPagerAdapter(this,getimageText(),getimageURLS())
我可以推断出最终应该存储图像URL和图像文本的数组尚未创建。这是我的应用程序崩溃的时候。
这是我的代码。我是Android和Java的新手,所以很明显我可以提供很多帮助!
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from viewpager_main.xml
setContentView(R.layout.viewpager_main);
// Fetch the list of URLs using a background network task
new downloadTask().execute(BASE_URL);
// Locate the ViewPager in viewpager_main.xml
viewPager = (ViewPager) findViewById(R.id.pager);
// Pass results to ViewPagerAdapter Class
adapter = new ViewPagerAdapter(this, getimageText(), getimageURLS());
// Binds the Adapter to the ViewPager
viewPager.setAdapter(adapter);
}
答案 0 :(得分:2)
您最初可以设置默认图像,并且可以修改asyncTask以采用回调方法。此回调方法将是一个初始化ViewPager的方法。在AsyncTask中,您将获取图像并覆盖onPostExecute()方法以调用该回调方法。
实施例
class PictureGrabber extends AsyncTask<URL, VOID, VOID>{
IPicCallBack callBack;
PictureGrabber(IPicCallBack callback)
{
this.callback = callback;
}
protected Void doInBackGround(URL... urls){
}
protected void onPostExecute(VOID result)
{
callback.Init();
}
public interface IPicCallBack{
public void Init();
}
然后在您的代码中,您需要实现该IPicCallback并将其设置在asyncTask上,当任务完成时,它将调用该方法