我创建了一个 ListFragment ,意图填充 RSS 数据。唯一的问题是我收到强制关闭我的应用程序的 NullPointerException 。这是LogCat:
03-30 15:43:44.584: E/AndroidRuntime(28703): at com.example.app.TestFragment$MyCustomAdapter.getView(TestFragment.java:157)
该错误指向此代码:
listTitle.setText(feed.getList().get(position).getTitle());
从这个班级; ListFragment。
public final class TestFragment extends ListFragment {
private static final String KEY_CONTENT = "TestFragment:Content";
public static TestFragment newInstance(String content) {
TestFragment fragment = new TestFragment();
return fragment;
}
private RSSFeed myRssFeed = null;
private String mContent = "???";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((savedInstanceState != null)
&& savedInstanceState.containsKey(KEY_CONTENT)) {
mContent = savedInstanceState.getString(KEY_CONTENT);
}
}
private RSSFeed feed = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
fillData();
return inflater.inflate(R.layout.list_fragment, container, false);
}
public void fillData() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
URL rssUrl = new URL("http://allthingsd.com/feed/");
SAXParserFactory mySAXParserFactory = SAXParserFactory
.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
XMLReader myXMLReader = mySAXParser.getXMLReader();
RSSHandler myRSSHandler = new RSSHandler();
myXMLReader.setContentHandler(myRSSHandler);
InputSource myInputSource = new InputSource(rssUrl.openStream());
myXMLReader.parse(myInputSource);
myRssFeed = myRSSHandler.getFeed();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (myRssFeed != null) {
/*
* TextView feedTitle = (TextView) findViewById(R.id.feedtitle);
* TextView feedDescribtion = (TextView)
* findViewById(R.id.feeddescribtion); TextView feedPubdate =
* (TextView) findViewById(R.id.feedpubdate); TextView feedLink =
* (TextView) findViewById(R.id.feedlink);
* feedTitle.setText(myRssFeed.getTitle());
* feedDescribtion.setText(myRssFeed.getDescription());
* feedPubdate.setText(myRssFeed.getPubdate());
* feedLink.setText(myRssFeed.getLink());
*/
MyCustomAdapter adapter = new MyCustomAdapter(getActivity(),
R.layout.row, myRssFeed.getList());
setListAdapter(adapter);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KEY_CONTENT, mContent);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
/*
* Intent intent = new Intent(this,ShowDetails.class); Bundle bundle =
* new Bundle(); bundle.putString("keyTitle",
* myRssFeed.getItem(position).getTitle());
* bundle.putString("keyDescription",
* myRssFeed.getItem(position).getDescription());
* bundle.putString("keyLink", myRssFeed.getItem(position).getLink());
* bundle.putString("keyPubdate",
* myRssFeed.getItem(position).getPubdate()); intent.putExtras(bundle);
* startActivity(intent);
*/
}
public class MyCustomAdapter extends ArrayAdapter<RSSItem> {
public MyCustomAdapter(Context context, int textViewResourceId,
List<RSSItem> list) {
super(context, textViewResourceId, list);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
if (row == null) {
LayoutInflater inflater = getActivity().getLayoutInflater();
row = inflater.inflate(R.layout.row, parent, false);
}
TextView listTitle = (TextView) row.findViewById(R.id.textView2);
listTitle.setText(feed.getList().get(position).getTitle());
TextView listPubdate = (TextView) row.findViewById(R.id.textView1);
listPubdate.setText(myRssFeed.getList().get(position).getPubdate());
if (position % 2 == 0) {
listTitle.setBackgroundColor(0xff101010);
listPubdate.setBackgroundColor(0xff101010);
} else {
listTitle.setBackgroundColor(0xff080808);
listPubdate.setBackgroundColor(0xff080808);
}
return super.getView(position, convertView, parent);
}
}
}
答案 0 :(得分:2)
该错误指向此代码:
listTitle.setText(feed.getList().get(position).getTitle());
查找NullPointerException相对简单,只需检查您引用的每个变量即可。例如,我没有看到你实例化feed
的位置,你在这里声明它:
private RSSFeed feed = null;
但它永远不会收到除null
以外的其他值,您需要feed = new RSSFeed();
之类的代码......(您的意思是使用myRSSFeed
吗?)
答案 1 :(得分:0)
检查你的row.xml id。这可能导致你的空指针。