2

Cursorデータベースに保存されているデータを取得するために を使用していSQLiteます。Cursorデータベースからのデータがある場合、コードは正常に機能します。しかし、 にCursorデータが含まれていない場合は、NullPointerExceptionatcursor.movetofirst()メソッドを取得します。他の場所でも同様のコードを使用しましたが、movetofirst()メソッドは他の場所では提供しませんNullPointerException。数日からこれを試していますが、何が問題なのかわかりません。親切に助けてください。

    public class Country extends Activity {

        private DbAdapter mDb;
        private Cursor mCurSugCnt;
        String country=null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.country);

            mDb=new DbAdapter(this);
            mDb.open();

            country= this.getIntent().getExtras().getString("country");
            fillSugCntData(country);

        }

    private void fillSugCntData(String cnt) {
        //I have tried multiple methods. The problem occurs when there is no data returned by any of the methods called
        //mCurSugCnt=mDb.fetchCatNotes("abc");
        mCurSugCnt=mDb.fetchCntNotes(cnt);

        //This is where I called the null pointer exception in case no data is returned by the cursor
        mCurSugCnt.moveToFirst();

    }


---------------------

public Cursor fetchCntNotes(String cnt){

        int id;
        Cursor appfinlist=null;
        Cursor temp=mDb.query(CNT_TABLE, new String[]{KEY_ROWID}, KEY_CNTNM + "=\"" + cnt + "\"", null, null , null, null);
        Cursor applist;

        if(temp.moveToFirst()){
            id=temp.getInt(temp.getColumnIndexOrThrow(DbAdapter.KEY_ROWID));

            applist=mDb.rawQuery("SELECT appcntid FROM appcntlist WHERE cntappid = "+id, null);
            if(applist.moveToFirst()){
                String[] cntin=new String[applist.getCount()];
                for(int i=0;i<applist.getCount();i++){
                    cntin[i]=""+applist.getInt(applist.getColumnIndexOrThrow(DbAdapter.KEY_APPCNTID));
                    Log.d("amit","countryname id cnt var: " + cntin[i]);
                    applist.moveToNext();   
                }

                String query = "SELECT * FROM applist"
                    + " WHERE _id IN (" + makePlaceholders(applist.getCount()) + ")";

                appfinlist = mDb.rawQuery(query, cntin);
                Log.d("amit","countryname id get count: " + appfinlist.getCount());
            }
        }    
            return appfinlist;
    }

    private String makePlaceholders(int count) {
        String toRet="?";

        for (int i=1;i<count;i++){
            toRet=toRet + ",?";
        }
        return toRet;
    }
4

3 に答える 3

6

使用する前に必ずgetCountを確認してください。

if(mCurSugCnt!=null && mCurSugCnt.getCount()>0 )
{
 mCurSugCnt.moveToFirst();
}
于 2012-12-31T09:42:35.443 に答える
1

NullPointerException乗っている場合は、アクセスする前にNullmCurSugCnt.moveToFirst();どうかを確認する何らかの条件を設定する必要があります。Cursor mCurSugCnt

お気に入り:

private void fillSugCntData(String cnt) {
         mCurSugCnt = mDb.fetchCntNotes(cnt);
         if(mCurSugCnt != null && mCurSugCnt.getCount() > 0)
         {
            mCurSugCnt.moveToFirst();
         }
    }
于 2012-12-31T09:43:39.563 に答える
0

コードを確認してください

Cursor appfinlist=null; 
Cursor temp=mDb.query(CNT_TABLE, new String[]{KEY_ROWID}, KEY_CNTNM + "=\"" + cnt + "\"", null, null , null, null);

レコードが見つからない場合は、ブロックの後に

if(temp.moveToFirst()){
    ....
}

null「appfinlist」をmCurSugCntに返します

return appfinlist;

そのため、Nullpointer 例外が発生しました。通常、クエリ メソッドを呼び出してカーソルを取得すると、null オブジェクトは返されません。

于 2014-10-16T07:37:11.437 に答える