1

2 つの値を比較しようとしています。1 つはデータベース内にあり、もう 1 つはデータベース クラスのクエリを含むメソッドに渡されます。実行しようとすると、アプリがクラッシュします。

データを送信するコード:

projectdatabase db = new projectdatabase(this); 
    String gotid = db.getProjectName(id);

クエリを実行したデータベース クラスのメソッドのコード:

public String getProjectName(String id) {                   

    String[] columns = new String[] {PROJECT_NAME,KEY_ROWID};
    Cursor c = projectDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + id, null, null, null, null);
    String result = "";

    int iID = c.getColumnIndex(PROJECT_ID);

    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result = result + c.getString(iID);
    }

    return result;
}

where句に何かありますか?

編集:

Arash の回答の後に実装されたコード:

public String getProjectName(String id) {                   

    String[] columns = new String[] {PROJECT_NAME,KEY_ROWID};
    Cursor c = projectDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + id, null, null, null, null);
    String result = "";

    if(c.moveToFirst())
    {
       int iName = c.getColumnIndex(PROJECT_NAME);

       for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            result = result + c.getString(iName);
        }
    }

    return result;
}

丸太の猫:

12-31 15:25:15.193: W/dalvikvm(2134): threadid=1: thread exiting with uncaught   
exception (group=0x409c01f8)
12-31 15:25:15.257: I/dalvikvm(2134): threadid=3: reacting to signal 3
12-31 15:25:15.355: E/AndroidRuntime(2134): FATAL EXCEPTION: main
12-31 15:25:15.355: E/AndroidRuntime(2134): java.lang.RuntimeException: Unable to start    
activity ComponentInfo{com.kk.project/com.kk.project.ViewProjectDetails}:  
java.lang.NullPointerException
12-31 15:25:15.355: E/AndroidRuntime(2134):     at  
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at 
android.app.ActivityThread.access$600(ActivityThread.java:123)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at 
android.os.Handler.dispatchMessage(Handler.java:99)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at   
android.os.Looper.loop(Looper.java:137)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at 
android.app.ActivityThread.main(ActivityThread.java:4424)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at  
java.lang.reflect.Method.invokeNative(Native Method)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at 
java.lang.reflect.Method.invoke(Method.java:511)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at  
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at  
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at  
dalvik.system.NativeStart.main(Native Method)
12-31 15:25:15.355: E/AndroidRuntime(2134): Caused by: java.lang.NullPointerException
12-31 15:25:15.355: E/AndroidRuntime(2134):     at  
com.kk.project.projectdatabase.getProjectName(projectdatabase.java:123)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at   
com.kk.project.ViewProjectDetails.onCreate(ViewProjectDetails.java:19)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at   
android.app.Activity.performCreate(Activity.java:4465)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at   
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-31 15:25:15.355: E/AndroidRuntime(2134):     at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)

12-31 15:25:15.355: E/AndroidRuntime(2134): ... 11 もっと見る

4

1 に答える 1

0

カーソル列を使用して NPE を回避する前に、カーソルに行があることを常に確認してください。

それ以外の :

int iID = c.getColumnIndex(PROJECT_ID);

使用する :

if(c.MoveToFirst())
{
   int iID = c.getColumnIndex(PROJECT_ID);
}

編集:カーソル選択列に「PROJECT_ID」列がありません

2番目の編集:

Like This を使用して、 Cursor のコンテンツを取得します。

String T = c.getString(c.getColumnIndex(KEY_Your_STRING));
Int I = c.getInt(c.getColumnIndex(KEY_Your_INTEGER))

Project_Name を整数値に割り当てました。

于 2012-12-31T07:44:29.380 に答える