Java Android Xml拉式解析器错误-SitesDownloadTask.onPostExecute
我的应用程序中有三个不同的适配器和三个XML解析器,用于在ViewPager上滑动的三个片段 我的应用程序运行良好,直到我开始在第一个片段和第二个片段之间或第二个片段和第三个片段之间滑动快一点 日志Cat消息: 在第一个和第二个之间滑动时:Java Android Xml拉式解析器错误-SitesDownloadTask.onPostExecute,java,android,xml,android-fragments,android-arrayadapter,Java,Android,Xml,Android Fragments,Android Arrayadapter,我的应用程序中有三个不同的适配器和三个XML解析器,用于在ViewPager上滑动的三个片段 我的应用程序运行良好,直到我开始在第一个片段和第二个片段之间或第二个片段和第三个片段之间滑动快一点 日志Cat消息: 在第一个和第二个之间滑动时: FATAL EXCEPTION: main Process: com.intera.eronetmarket, PID: 3326 java.lang.NullPointerException at android.widget.ArrayAdapt
FATAL EXCEPTION: main
Process: com.intera.eronetmarket, PID: 3326
java.lang.NullPointerException
at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
at adapters.KatAdapter.<init>(KatAdapter.java:32)
at com.intera.eronetmarket.Kategorije$SitesDownloadTask.onPostExecute(Kategorije.java:98)
at com.intera.eronetmarket.Kategorije$SitesDownloadTask.onPostExecute(Kategorije.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
我的第一个片段是AppDownlodTask类所在的位置。这在所有3个片段中都是相同的(每个片段只有适配器不同):
公共类preproceno扩展片段{
私人AppAdapter mAdapter;
私有ListView站点列表;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
Log.i(“mobAppModel”、“OnCreate()”);
视图根视图=充气机。充气(R.layout.activity_prepropuceno,container,false);
siteList=(ListView)rootView.findViewById(R.id.listView1);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整数位置、长id){
字符串url=mAdapter.getItem(pos.getstoreURL();
意向i=新意向(意向.行动\视图);
i、 setData(Uri.parse(url));
星触觉(i);
}
});
if(isNetworkAvailable()){
Log.i(“mobAppModel”,“开始下载任务”);
AppDownloadTask download=新建AppDownloadTask();
下载.execute();
}否则{
mAdapter=newAppAdapter(getActivity().getApplicationContext(),-1,XMLsourcePullParser.getmobAppModel(getActivity());
setAdapter(mAdapter);
}
返回rootView;
}
专用布尔值isNetworkAvailable(){
连接管理器连接管理器
=(ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
返回activeNetworkInfo!=null&&activeNetworkInfo.isConnected();
}
私有类AppDownloadTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…arg0){
//下载该文件
试一试{
Downloader.DownloadFromUrl(“https://dl.dropboxusercontent.com/s/te0c0s7y7zr79tm/kategorijeXML.xml,getActivity().openFileOutput(“XMLsource.xml”,Context.MODE_PRIVATE));
}catch(filenotfounde异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//设置适配器并将其设置为ListView。
mAdapter=newAppAdapter(getActivity().getApplicationContext(),-1,XMLsourcePullParser.getmobAppModel(getActivity());
setAdapter(mAdapter);
Log.i(“mobAppModel”,“adapter size=“+mAdapter.getCount());
}
}
}
我的适配器:
package adapters;
import java.util.List;
import models.KatModel;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.intera.eronetmarket.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
/*
* Custom Adapter class that is responsible for holding the list of sites after they
* get parsed out of XML and building row views to display them on the screen.
*/
public class KatAdapter extends ArrayAdapter<KatModel> {
ImageLoader imageLoader;
DisplayImageOptions options;
public KatAdapter(Context ctx, int textViewResourceId, List<KatModel> sites) {
super(ctx, textViewResourceId, sites);
//Setup the ImageLoader, we'll use this to display our images
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(ctx).build();
imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {
imageLoader.init(config);
}
//Setup options for ImageLoader so it will handle caching for us.
options = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();}
/*
* (non-Javadoc)
* @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)
*
* This method is responsible for creating row views out of a StackSite object that can be put
* into our ListView
*/
@SuppressLint("InflateParams")
@Override
public View getView(int pos, View convertView, ViewGroup parent){
RelativeLayout row = (RelativeLayout)convertView;
Log.i("StackSites", "getView pos = " + pos);
if(null == row){
//No recycled View, we have to inflate one.
LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = (RelativeLayout)inflater.inflate(R.layout.row_site, null);
}
//Get our View References
TextView nameTxt = (TextView)row.findViewById(R.id.nameTxt);
//Initially we want the progress indicator visible, and the image invisible
//Load the image and use our options so caching is handled.
//Set the relavent text in our TextViews
nameTxt.setText(getItem(pos).getcategoryName());
return row;
}
}
包适配器;
导入java.util.List;
导入模型.KatModel;
导入android.annotation.SuppressLint;
导入android.content.Context;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
进口公司内部市场;
导入com.nostra13.universalimageloader.core.DisplayImageOptions;
导入com.nostra13.universalimageloader.core.ImageLoader;
导入com.nostra13.universialimageloader.core.imageloader配置;
/*
*自定义适配器类,该类负责保存站点列表
*从XML中解析并构建行视图以在屏幕上显示它们。
*/
公共类适配器扩展了ArrayAdapter{
图像加载器;
显示图像选项;
公共适配器(上下文ctx、int-textViewResourceId、列表站点){
超级(ctx、textViewResourceId、站点);
//设置ImageLoader,我们将使用它来显示图像
ImageLoaderConfiguration config=新建ImageLoaderConfiguration.Builder(ctx.build();
imageLoader=imageLoader.getInstance();
如果(!imageLoader.isInited()){
init(config);
}
//ImageLoader的设置选项,以便它为我们处理缓存。
选项=新建DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();}
/*
*(非Javadoc)
*@see android.widget.ArrayAdapter#getView(int,android.view.view,android.view.ViewGroup)
*
*此方法负责从可以放置的StackSite对象中创建行视图
*进入我们的列表视图
*/
@SuppressLint(“充气参数”)
@凌驾
公共视图getView(int pos、视图转换视图、视图组父视图){
RelativeLayout行=(RelativeLayout)convertView;
Log.i(“StackSites”、“getView pos=“+pos”);
如果(空==行){
//没有循环视图,我们必须对其进行充气。
LayoutFlater充气器=(LayoutFlater)parent.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
行=(RelativeLayout)充气器。充气(R.layout.row_站点,空);
}
//获取我们的视图引用
TextView nameTxt=(TextView)row.findViewById(R.id.nameTxt);
//最初,我们希望进度指示器可见,而图像不可见
//加载图像并使用我们的选项,以便处理缓存。
//在文本视图中设置相关文本
setText(getItem(pos.getcategoryName());
返回行;
}
}
--
包适配器;
导入java.util.List;
导入模型.mobAppModel;
导入android.annotation.SuppressLint;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.ProgressBar;
导入android.widget.RelativeLayout;
进口公司内部市场;
导入com.nostra1
public class Preporuceno extends Fragment {
private AppAdapter mAdapter;
private ListView siteList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i("mobAppModel", "OnCreate()");
View rootView = inflater.inflate(R.layout.activity_preporuceno, container, false);
siteList = (ListView) rootView.findViewById(R.id.listView1);
siteList.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int pos,long id) {
String url = mAdapter.getItem(pos).getstoreURL();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
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;
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
private class AppDownloadTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... arg0) {
//Download the file
try {
Downloader.DownloadFromUrl("https://dl.dropboxusercontent.com/s/te0c0s7y7zr79tm/kategorijeXML.xml", getActivity().openFileOutput("XMLsource.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result){
//setup our Adapter and set it to the ListView.
mAdapter = new AppAdapter(getActivity().getApplicationContext(), -1, XMLsourcePullParser.getmobAppModel(getActivity()));
siteList.setAdapter(mAdapter);
Log.i("mobAppModel", "adapter size = "+ mAdapter.getCount());
}
}
package adapters;
import java.util.List;
import models.KatModel;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.intera.eronetmarket.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
/*
* Custom Adapter class that is responsible for holding the list of sites after they
* get parsed out of XML and building row views to display them on the screen.
*/
public class KatAdapter extends ArrayAdapter<KatModel> {
ImageLoader imageLoader;
DisplayImageOptions options;
public KatAdapter(Context ctx, int textViewResourceId, List<KatModel> sites) {
super(ctx, textViewResourceId, sites);
//Setup the ImageLoader, we'll use this to display our images
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(ctx).build();
imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {
imageLoader.init(config);
}
//Setup options for ImageLoader so it will handle caching for us.
options = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();}
/*
* (non-Javadoc)
* @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)
*
* This method is responsible for creating row views out of a StackSite object that can be put
* into our ListView
*/
@SuppressLint("InflateParams")
@Override
public View getView(int pos, View convertView, ViewGroup parent){
RelativeLayout row = (RelativeLayout)convertView;
Log.i("StackSites", "getView pos = " + pos);
if(null == row){
//No recycled View, we have to inflate one.
LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = (RelativeLayout)inflater.inflate(R.layout.row_site, null);
}
//Get our View References
TextView nameTxt = (TextView)row.findViewById(R.id.nameTxt);
//Initially we want the progress indicator visible, and the image invisible
//Load the image and use our options so caching is handled.
//Set the relavent text in our TextViews
nameTxt.setText(getItem(pos).getcategoryName());
return row;
}
}
package adapters;
import java.util.List;
import models.mobAppModel;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import com.intera.eronetmarket.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
@SuppressLint("InflateParams") public class AppAdapter extends ArrayAdapter<mobAppModel>{
ImageLoader imageLoader;
DisplayImageOptions options;
public AppAdapter(Context ctx,int textViewResourceId, List<mobAppModel> appModel){
super(ctx,textViewResourceId,appModel);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(ctx).build();
imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {
imageLoader.init(config);
}
options= new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();
}
public View getView(int pos, View convertView, ViewGroup parent){
RelativeLayout row = (RelativeLayout)convertView;
Log.i("mobAppModels", "getView pos = " + pos);
if(null == row){
//No recycled View, we have to inflate one.
LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = (RelativeLayout)inflater.inflate(R.layout.row_app, null);
}
//Get our View References
final ImageView iconImg = (ImageView)row.findViewById(R.id.iconUrl);
final ProgressBar indicator = (ProgressBar)row.findViewById(R.id.progress);
//Initially we want the progress indicator visible, and the image invisible
indicator.setVisibility(View.VISIBLE);
iconImg.setVisibility(View.INVISIBLE);
//Setup a listener we can use to swtich from the loading indicator to the Image once it's ready
ImageLoadingListener listener = new ImageLoadingListener(){
@Override
public void onLoadingStarted(String arg0, View arg1) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
indicator.setVisibility(View.INVISIBLE);
iconImg.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
// TODO Auto-generated method stub
}
};
//Load the image and use our options so caching is handled.
imageLoader.displayImage(getItem(pos).getimageUrl(),iconImg,options,listener);
//Set the relavent text in our TextViews
return row;
}
}
package adapters;
import java.util.List;
import models.mobAppModel;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.RatingBar;
import com.intera.eronetmarket.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
public class AppAdapterNajpop extends ArrayAdapter<mobAppModel>{
ImageLoader imageLoader;
DisplayImageOptions options;
public AppAdapterNajpop(Context ctx,int textViewResourceId, List<mobAppModel> appModel){
super(ctx,textViewResourceId,appModel);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(ctx).build();
imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {
imageLoader.init(config);
}
options= new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();
}
@SuppressLint("InflateParams")
public View getView(int pos, View convertView, ViewGroup parent){
RelativeLayout row = (RelativeLayout)convertView;
Log.i("mobAppModels", "getView pos = " + pos);
if(null == row){
//No recycled View, we have to inflate one.
LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = (RelativeLayout)inflater.inflate(R.layout.row_app_najpopularnije, null);
}
//Get our View References
final ImageView iconImg = (ImageView)row.findViewById(R.id.iconUrl);
TextView appHeadline = (TextView)row.findViewById(R.id.textView1);
TextView developer = (TextView)row.findViewById(R.id.textView2);
RatingBar ratingpoints =(RatingBar)row.findViewById(R.id.ratingBar);
final ProgressBar indicator = (ProgressBar)row.findViewById(R.id.progress);
//Initially we want the progress indicator visible, and the image invisible
indicator.setVisibility(View.VISIBLE);
iconImg.setVisibility(View.INVISIBLE);
//Setup a listener we can use to swtich from the loading indicator to the Image once it's ready
ImageLoadingListener listener = new ImageLoadingListener(){
@Override
public void onLoadingStarted(String arg0, View arg1) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
indicator.setVisibility(View.INVISIBLE);
iconImg.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
// TODO Auto-generated method stub
}
};
//Load the image and use our options so caching is handled.
imageLoader.displayImage(getItem(pos).geticonUrl(),iconImg,options,listener);
//Set the relavent text in our TextViews
appHeadline.setText(getItem(pos).getappHeadline());
developer.setText(getItem(pos).getdeveloper());
ratingpoints.setRating(Float.parseFloat(getItem(pos).getratingPoints()));
return row;
}
}
Activity attached = getActivity();
if (attached != null) {
mAdapter = new AppAdapter(attached.getApplicationContext(), -1, XMLsourcePullParser.getmobAppModel(getActivity()));
siteList.setAdapter(mAdapter);
}