2017-11-06 15 views
0

これまでのすべての助けてくれてありがとう。私は正常に自分のデータベースを作成し、sqliteブラウザでそれを見た。私は別々に各列の値を取得したい。これはDBHelperクラスに私のコードです:ログ-CATにSQLiteデータベースから値を取得Android

public TingTingUser getCurrentUser(int id){ 
    SQLiteDatabase currDB = databaseManager.getWritableDatabase(); 
    Cursor cursor = currDB.query(true, TABLE_NAME, new String[]{COL_ID, COL_USER_ID, COL_FULL_NAME, COL_GENDER, COL_DOB, COL_MOBILE_NUM, COL_OCCUPATION, COL_ORGANIZATION}, COL_ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null); 

    if (cursor != null && cursor.moveToFirst()){ 
     TingTingUser user = new TingTingUser(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getString(7)); 
     return user; 
    } 

    return null; 

} 

、値が正しく来ているが、私の活動classで、それは例外をスローします。ここでは個々の値を取得するための私のコードは次のとおりです。

マイDatabaseUtilsクラス:

活動のサンプルコードでの電話番号を取得
public class DatabaseUtils extends AppCompatActivity { 

private static final String TAG = DatabaseUtils.class.getSimpleName(); 

protected static DBHelper helper; 
public static Context context; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    helper = new DBHelper(this); 
    context = this; 

} 

public static String getUserPhoneNumber(){ 
    TingTingUser user = helper.getCurrentUser(1); 
    String number = user.getMobileNumber(); 

    Log.d(TAG, "Phone Number from DB is:\t" + number); 

    if (number == null){ 
     return null; 
    } 
    return number; 
} 

public static String getUserNameFromDB(){ 
    TingTingUser user = helper.getCurrentUser(1); 
    String name = user.getDisplayName(); 

    if (name == null){ 
     return null; 
    } 
    return name; 

} 

public static boolean saveGalleryImageToDB(Uri uri){ 
    helper.open(); 

    InputStream inputStream = null; 
    try { 
     inputStream = context.getContentResolver().openInputStream(uri); 
     byte[] inputData = AppUtils.ImageUtils.getBytes(inputStream); 
     helper.saveGalleryImage(inputData); 
     helper.close(); 
     return true; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    finally { 
     helper.close(); 
    } 
    return false; 

} 

public static boolean loadImage(Context context, ImageView imageView){ 
    try{ 
     helper.open(); 
     byte[] bytes = helper.getImage(); 
     helper.close(); 
     Bitmap bitmap = AppUtils.ImageUtils.getImage(bytes); 
     Uri uri = AppUtils.ImageUtils.getImageUri(context, bitmap); 
     imageView.setImageBitmap(AppUtils.ImageUtils.getImage(bytes)); 
     return true; 
    } catch (Exception ex){ 
     ex.printStackTrace(); 
    } 
    return false; 
} 

} 

String phone = DatabaseUtils.getUserPhoneNumber(); 
Log.d(TAG, "Phone Number form DB is:\t" + phone); 

TingTingUserは、基本的な情報と私のユーザーのモデルクラスでありますDatabaseUtilsクラスでデモされています。 logcatで

例外メッセージ:

に起因:java.lang.NullPointerExceptionが仮想メソッドを起動しようとする「com.billionusers.tingting.model.TingTingUser com.billionusers.tingting.db.DBHelper.getCurrentUser (int) 'null nullオブジェクト参照で com.billionusers.tingting.db.DatabaseUtils.getUserPhoneNumber(DatabaseUtils.java:39) com.billionusers.tingting.activities.EditProfileActivity.onCreate(EditProfileActivity.java:89) android.app.Activity.performCreate(Activity.java:5990) android.app.Instrumentation.callAct android.app.ActivityThread.access $ 800からandroid.app.ActivityThread.performLaunchActivityでivityOnCreate(Instrumentation.java:1106) android.app.ActivityThread.handleLaunchActivityで(ActivityThread.java:2278) (ActivityThread.java:2387) (ActivityThread.java:151) android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) (android.os.Handler.dispatchMessage(Handler.java:102) android.os.Looper.loop (Looper.java:135) android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(私thod.java:372)com.android.internal.os.ZygoteInit.mainでcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) で (ZygoteInit.java:698)

このエラーを解決するにはどうすればよいですか?おかげさまで ここで

は、私のテーブルのスナップショットです: enter image description here

私は別に列の値を取得したいです。私を見て案内してください。もう一度ありがとう。

+0

ここで、String phone = DatabaseUtils.getUserPhoneNumber();を呼び出しています。 –

+0

私の活動では、私はdb値を使用したい、申し訳ありませんクラスが長すぎる、スペースを取るでしょう –

+0

あなたは別の活動からこれを呼び出すのですか? –

答えて

0

これは、dbHelperを初期化していないために発生しています。アクティビティonCreateメソッドでそのメソッドを初期化しています。つまり、その静的メソッドを他のアクティビティから呼び出すと、静的メソッドによってそのメソッドにアクセスできるようになります。あなたが提案したように、あなたがprofileactityから呼び出すのは、onCreateが存在しないことを意味します。このdbHelperは初期化されていません。これを解決するには、そのメソッド(getUserPhoneNumber())でdbhelperを初期化する必要があります。

+0

私はgetUserPhoneNumber()メソッドで初期化しましたが、別の例外をスローします。質問を編集してテーブルを見て、値を個別にリタイアする方法を教えてください。おかげで –

0

データベースオブジェクトの初期化をチェックインします。

nullpointer例外は、データベースオブジェクトが正しく初期化されていない場合に特に発生します。

+0

はい、おそらく。質問が編集されました –

関連する問題