1

私のアクティビティのonCreateメソッドの1つにこのコードがあります

    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 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ニュースは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;

    }
4

4 に答える 4

3

問題は newsReporter.getAllNews() メソッドにあります。値を初期化せずに配列を返しているようです。

News[] allNews = newsReporter.getAllNews();

意味、

allNews.lengthは、何らかの価値をもたらす可能性があります。しかし、各インデックスで値が欠落しているか、少なくとも 1 つ以上のインデックスで配列内の値が欠落しています。

以下のように印刷して、値があるかどうかを確認します

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 です。null で getnewsText() を呼び出すと、NPE がスローされます。最良のテストは、allNews[i] を出力するか、それが null かどうかを確認することです。

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

allNews[] は null ではないと言っているので、AllNews[i].getNewsText() が例外をスローするように、News[] に null が含まれている必要があります。

于 2013-01-15T21:30:07.813 に答える
0

6 個の配列は、size 6 の参照を持つことができnullます。各Newsオブジェクトを に出力してください。allNews配列内の少なくとも 1 つの位置がnull.

于 2013-01-15T21:25:23.727 に答える