Android 应用程序因连接速度慢而崩溃
我已经用3个选项卡实现了ActionBar TablListener。 每个选项卡都有三个类似的片段,其中包含从同一XML文件填充的listview 我的问题是,每次我在标签之间滑动时,我的XML文件都会被下载,而在连接速度较慢时,我的应用程序每次在标签之间滑动时都会尝试下载XML文件,直到它崩溃。当没有internet连接时,一切正常,我的片段使用最后一个已知的适配器在每个片段中显示ListView 我的下载程序:Android 应用程序因连接速度慢而崩溃,android,xml,android-fragments,Android,Xml,Android Fragments,我已经用3个选项卡实现了ActionBar TablListener。 每个选项卡都有三个类似的片段,其中包含从同一XML文件填充的listview 我的问题是,每次我在标签之间滑动时,我的XML文件都会被下载,而在连接速度较慢时,我的应用程序每次在标签之间滑动时都会尝试下载XML文件,直到它崩溃。当没有internet连接时,一切正常,我的片段使用最后一个已知的适配器在每个片段中显示ListView 我的下载程序: if(isNetworkAvailable() ){ Log.i("m
if(isNetworkAvailable() ){
Log.i("mobAppModel", "starting download Task");
AppDownloadTask download = new AppDownloadTask();
download.execute();
}else {
mAdapter = new AppAdapter(getActivity().getApplicationContext(), -1, XMLsourcePullParser.getmobAppModel(getActivity()));
siteList.setAdapter(mAdapter);
}
return rootView;
AppDownloadTask:
private class AppDownloadTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... arg0) {
//Download the file
try {
Downloader.DownloadFromUrl("http://URL_on_XML_file/", getActivity().openFileOutput("XMLsource.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
私有类AppDownloadTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…arg0){
//下载该文件
试试{
Downloader.DownloadFromUrl(“http://URL_on_XML_file/,getActivity().openFileOutput(“XMLsource.xml”,Context.MODE_PRIVATE));
}catch(filenotfounde异常){
e、 printStackTrace();
}
返回null;
}
如何绕过每次下载XML文件,或者如果使用最后一个已知适配器的连接速度较慢?听起来您的问题是,在下载XML文件之前,您有未初始化的变量。如果它在没有网络连接时起作用,我会创建一个标记mXmlDownloaded。默认值为false。当XML文件为do时Wnload,将其设置为true。在任何地方更改代码,如下所示:
if(isNetworkAvailable() ){
Log.i("mobAppModel", "starting download Task");
AppDownloadTask download = new AppDownloadTask();
download.execute();
}else {
if(mXmlDownloaded){
mAdapter = new AppAdapter(getActivity().getApplicationContext(), -1, XMLsourcePullParser.getmobAppModel(getActivity()));
siteList.setAdapter(mAdapter);
}
}
改变你使用这些变量的任何其他地方。这样,在你有数据之前你不会使用它们