Java 为什么我在这里得到NullPointerException?
我的活动的onCreate方法之一中有此代码Java 为什么我在这里得到NullPointerException?,java,android,nullpointerexception,Java,Android,Nullpointerexception,我的活动的onCreate方法之一中有此代码 GetNews newsReporter = new GetNews(getApplicationContext()); try{ News[] allNews = newsReporter.getAllNews(); Log.d("News Count", String.valueOf(allNews.length)); String[] timestamps = new String
GetNews newsReporter = new GetNews(getApplicationContext());
try{
News[] allNews = newsReporter.getAllNews();
Log.d("News Count", String.valueOf(allNews.length));
String[] timestamps = new String[allNews.length];
String[] texts = new String[allNews.length];
for(int i=0;i<allNews.length;i++)
{
// timestamps[i] = allNews[i].getNewsTime();
texts[i] = allNews[i].getNewsText();
// Log.d("TimeStamp", timestamps[i]);
Log.d("Text", texts[i]);
}
}catch(Exception e){
Log.e("Error News", e.toString());
}
p.S.新闻存储在一个SQLitedatabase中,当我从DDMS中提取数据库时,它包含所有6行的有效值,其中没有一行是空的
编辑:
这是我的GetAllNews方法
public News[] getAllNews(){
SQLiteDatabase db = ConMan.OpenDBConnection();
try{
Cursor cursor = db.query(News_Table, Columns, null, null, null, null, null);
if(cursor!=null)
{
cursor.moveToFirst();
}
News[] allNews = new News[cursor.getCount()];
int i =0;
while(cursor.isLast()){
allNews[i] = new News(Integer.parseInt(cursor.getString(0)),
cursor.getString(1),cursor.getString(2));
cursor.moveToNext();
i++;
}
db.close();
ConMan.close();
return allNews;
}catch(Exception e)
{
Log.e("News DB Errors", e.getMessage());
}
return null;
}
大小为6的数组可以有6个空引用。打印allNews中的每个新闻对象,我打赌10位奥巴马夫妇在数组中至少有一个位置为空 大小为6的数组可以有6个空引用。打印allNews中的每个新闻对象,我打赌10位奥巴马夫妇在数组中至少有一个位置为空
很可能,allNews[someIndex]为空。在null上调用getnewsText时抛出NPE。
最好的测试是输出allNews[i]或检查它是否为null
System.out.println(allNews[i]==null)
很可能,allNews[someIndex]为空。在null上调用getnewsText时抛出NPE。
最好的测试是输出allNews[i]或检查它是否为null
System.out.println(allNews[i]==null)
问题出在newsReporter.getAllNews方法中。看起来它正在返回未初始化值的数组
News[] allNews = newsReporter.getAllNews();
意思是
allNews.length可能会为您带来一些价值。但在每个索引中,您都缺少值,或者至少一个或多个索引缺少数组中的值
按照下面的方式进行打印以查看是否有值
for (News news : allNews)
System.out.println(news);
看起来它根本不会进入下一个块
while(cursor.isLast()){
allNews[i] = new News(Integer.parseInt(cursor.getString(0)),
cursor.getString(1),cursor.getString(2));
cursor.moveToNext();
i++;
}
检查cursor.isLast方法是否返回true以进入此循环。问题出在newsReporter.getAllNews方法中。看起来它正在返回未初始化值的数组
News[] allNews = newsReporter.getAllNews();
意思是
allNews.length可能会为您带来一些价值。但在每个索引中,您都缺少值,或者至少一个或多个索引缺少数组中的值
按照下面的方式进行打印以查看是否有值
for (News news : allNews)
System.out.println(news);
看起来它根本不会进入下一个块
while(cursor.isLast()){
allNews[i] = new News(Integer.parseInt(cursor.getString(0)),
cursor.getString(1),cursor.getString(2));
cursor.moveToNext();
i++;
}
检查cursor.isLast方法是否返回true以进入此循环。您是说allNews[]不为null,因此必须是News[]包含null,因此allNews[i]。getNewsText引发异常。您是说allNews[]不为null,因此必须是News[]包含null,这样allNews[i].getNewsText引发异常。看起来您的文本为null看起来allNews[i]为null。在那里放一个日志语句或调试断点,我敢打赌就是这样;数组中至少有一个条目为空,而不是文本我不认为这可能是这种情况看起来你的文本为空看起来allNews[i]为空。在那里放一个日志语句或调试断点,我敢打赌就是这样;数组中至少有一个条目是空的,而不是文本。我不认为这可能是这种情况。是的,它正在输出空值!很酷,请检查getAllNews方法以了解该问题。祝你好运我已经添加了方法,你能帮我吗?@Ishankhana我已经对答案进行了编辑,你可以检查一下。如果我的日志显示了6个计数。dNews count,String.valueOfallNews.length;为什么您觉得它没有进入while循环?是的,它正在输出null!很酷,请检查getAllNews方法以了解该问题。祝你好运我已经添加了方法,你能帮我吗?@Ishankhana我已经对答案进行了编辑,你可以检查一下。如果我的日志显示了6个计数。dNews count,String.valueOfallNews.length;为什么您觉得它没有进入while循环?