带有自定义数组适配器的 Rss reader
Rss reader with custom array adapter
我在 android studio 中制作一个带有 rss feed 的 android 应用程序,所以我试图将标题和描述从:http://feeds.bbci.co.uk/news/rss.xml 放入两个文本视图使用自定义适配器。 rss 提要在选项卡中。每次我尝试 运行 我的程序时,我都会遇到异常,问题出现在 class:
public class LAdapter extends ArrayAdapter<Info> {
public LAdapter(Context context, ArrayList<Info> nfos) {super(context, 0,nfos);}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Info info = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.basic_list_item, parent, false);
}
// Lookup view for data population
TextView title = (TextView) convertView.findViewById(R.id.Tit);
TextView description = (TextView) convertView.findViewById(R.id.Desc);
title.setText(info.Title);
description.setText(info.Description);
// Return the completed view to render on screen
return convertView;
}
}
部分Tab_1.class:
public class Tab_1 extends Fragment {
ListView mList;
ArrayList<Info> arrayOfInfo;
LAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_1, container, false);
LAdapter adapter = new LAdapter(getActivity(), arrayOfInfo);
#Line 44-> mList = (ListView) v.findViewById(R.id.list);
new GetRssFeed().execute("http://feeds.bbci.co.uk/news/rss.xml");
mList.setAdapter(adapter);
return v;
}
异常:
Process: com.example.pauly.myapplication, PID: 3896
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
at android.widget.ListView.setAdapter(ListView.java:487)
at com.example.pauly.myapplication.Tabs.Tab_1.onCreateView(Tab_1.java:43)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
at
android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1072)
at android.support.v4.view.ViewPager.populate(ViewPager.java:918)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1440)
...
LAdapter adapter = new LAdapter(getActivity(), arrayOfInfo);
arrayOfInfo 为空(甚至未初始化),因为您在 arrayOfInfo 之后调用了异步任务。使用从 DoInBackground 方法接收到的数据,您可以在 asynctask 的 OnPostExecute 方法中用数据设置 arrayOfInfo,在用数据设置该数组后,您也可以在 OnPostExecute 中调用
LAdapter adapter = new LAdapter(getActivity(), arrayOfInfo);
mList.setAdapter(adapter);
OnPostExecute 基本上是在处理您的 UI.
我在 android studio 中制作一个带有 rss feed 的 android 应用程序,所以我试图将标题和描述从:http://feeds.bbci.co.uk/news/rss.xml 放入两个文本视图使用自定义适配器。 rss 提要在选项卡中。每次我尝试 运行 我的程序时,我都会遇到异常,问题出现在 class:
public class LAdapter extends ArrayAdapter<Info> {
public LAdapter(Context context, ArrayList<Info> nfos) {super(context, 0,nfos);}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Info info = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.basic_list_item, parent, false);
}
// Lookup view for data population
TextView title = (TextView) convertView.findViewById(R.id.Tit);
TextView description = (TextView) convertView.findViewById(R.id.Desc);
title.setText(info.Title);
description.setText(info.Description);
// Return the completed view to render on screen
return convertView;
}
}
部分Tab_1.class:
public class Tab_1 extends Fragment {
ListView mList;
ArrayList<Info> arrayOfInfo;
LAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_1, container, false);
LAdapter adapter = new LAdapter(getActivity(), arrayOfInfo);
#Line 44-> mList = (ListView) v.findViewById(R.id.list);
new GetRssFeed().execute("http://feeds.bbci.co.uk/news/rss.xml");
mList.setAdapter(adapter);
return v;
}
异常:
Process: com.example.pauly.myapplication, PID: 3896
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
at android.widget.ListView.setAdapter(ListView.java:487)
at com.example.pauly.myapplication.Tabs.Tab_1.onCreateView(Tab_1.java:43)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
at
android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1072)
at android.support.v4.view.ViewPager.populate(ViewPager.java:918)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1440)
...
LAdapter adapter = new LAdapter(getActivity(), arrayOfInfo);
arrayOfInfo 为空(甚至未初始化),因为您在 arrayOfInfo 之后调用了异步任务。使用从 DoInBackground 方法接收到的数据,您可以在 asynctask 的 OnPostExecute 方法中用数据设置 arrayOfInfo,在用数据设置该数组后,您也可以在 OnPostExecute 中调用
LAdapter adapter = new LAdapter(getActivity(), arrayOfInfo);
mList.setAdapter(adapter);
OnPostExecute 基本上是在处理您的 UI.