Java 为什么我在这里得到NullPointerException?

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

我的活动的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());
    }
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循环?