[英]Why am I getting NullPointerException here?
我在我的一個活動的onCreate方法中有這個代碼
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 []不為null。
但我在Line text [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;
}
}
PS News存儲在SQLitedatabase中,當我從我的DDMS中提取數據庫時,它包含有效值的所有6行,它們都不為null。
編輯:這是我的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;
}
問題出在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以進入此循環。
texts[i] = allNews[i].getNewsText();
最有可能的是,allNews [someIndex]為null。 當在null上調用getnewsText()時拋出NPE。 最好的測試是輸出allNews [i]或檢查它是否為空。
System.out.println(allNews[i]==null)
size
6的數組可以有6個 null
引用。 在allNews
打印每個News
對象,我打賭10 Obamas,數組中至少有一個位置為null
。
你說allNews []不是null,所以它必須是News []包含null,所以allNews [i] .getNewsText()拋出異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.