1

我在我的一项活动的 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());
    }

News Count 在 Logcat 中显示 6,这意味着 News[] 不为空。

但是我在 Line texts[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 行的有效值,其中没有一个为空。

编辑:这是我的 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;

    }
4

4 回答 4

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 以进入此循环。

于 2013-01-15T21:25:53.137 回答
1
        texts[i] = allNews[i].getNewsText();

最有可能的是,allNews[someIndex] 为空。当在 null 上调用 getnewsText() 时会抛出 NPE。最好的测试是输出 allNews[i] 或检查它是否为空。

     System.out.println(allNews[i]==null)
于 2013-01-15T21:25:43.640 回答
0

size 6 个数组可以有6 个 null引用。打印您的每个News对象allNews,我打赌 10 个奥巴马,至少在数组中的一个位置是null.

于 2013-01-15T21:25:23.727 回答
0

你是说 allNews[] 不为空,所以肯定是 News[] 包含空,所以 allNews[i].getNewsText() 会抛出异常。

于 2013-01-15T21:30:07.813 回答