我在我的一个活动的onCreate Method
中有这个代码 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());
}
新闻计数在Logcat中显示6,这意味着News []不为空。
但我在行文本[i] = allNews [i] .getNewsTime();
上收到NullPointerException这是我的新闻类
public class News {
private int id;
private String timestamp;
private String text;
public News(int i,String t, String ti)
{
this.id=i;
this.text = t;
this.timestamp = ti;
}
public String getNewsTime()
{
return this.timestamp;
}
public String getNewsText()
{
return this.text;
}
}
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;
}
答案 0 :(得分:3)
问题出在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进入此循环。
答案 1 :(得分:1)
texts[i] = allNews[i].getNewsText();
最有可能的是,allNews [someIndex]为空。当在null上调用getnewsText()时抛出NPE。 最好的测试是输出allNews [i]或检查它是否为空。
System.out.println(allNews[i]==null)
答案 2 :(得分:0)
size
6 的数组可以包含 6 null
个引用。打印News
中的每个allNews
个对象,我打赌10个Obamas,数组中至少有一个位置是null
。
答案 3 :(得分:0)
你说allNews []不是null,所以必须是News []包含null,以便allNews [i] .getNewsText()抛出异常。