2016-06-14 2 views
0

내가 SQLite는에 액세스하기 위해 브로커를 구축 할 수있는 간단한 운동을하고 있어요 내 주요 활동은 다음과 같습니다안드로이드 스튜디오 오류 : "java.lang.NullPointerException이 : 가상 메서드를 호출하는 시도 ..."

package com.example.mauro.localtest; 

import android.app.Activity; 
import android.database.sqlite.SQLiteDatabase; 

public class MainActivity extends Activity { 
    DbBroker db = new DbBroker(this, "my_database", null, 1); 
    SQLiteDatabase sqldb = db.getWritableDatabase(); 
    public int test = db.insertTest("New test", "Test created from app"); 
} 

DbBroker 클래스는 있지만 :

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mauro.localtest/com.example.mauro.localtest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

사람이 언더 나를 도와 드릴까요 : 내가 프로젝트를 실행하면

package com.example.mauro.localtest; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/** 
* Created by Mauro on 09/06/2016. 
*/ 
public class DbBroker extends SQLiteOpenHelper { 
    public DbBroker(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase arg0) { 
     arg0.execSQL("create table tests (id INTEGER PRIMARY KEY, publicid INTEGER, testname TEXT, description TEXT"); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 

    } 
    public int insertTest(String name, String desc){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues vals = new ContentValues(); 
     vals.put("testname", name); 
     vals.put("description", desc); 
     return (int) db.insert("tests", null, vals); 
    } 
} 

가이 오류가 응용 프로그램을 중지 문제는 어디에 있습니까?

+0

사용자가 매니페스트에서 활동을 정의 했습니까? –

+4

코드를 DbBroker db = new DbBroker (getActivity(), "my_database", null, 1)로 변경하여 한 번 시도해 볼 것을 제안합니다. 현재로서는 문맥 만이 null로 간주됩니다. 비슷한 질문을 발견했습니다. http://stackoverflow.com/questions/30064080/android-app-crashes-on-startup-sqlite-nullpointereception-in-contactsfragment http://stackoverflow.com/questions/29545524/android-nullpointerexception-fra-within-a-fra에서 데이터베이스로로드 할 수없는 데이터베이스 희망 사항 문제가 해결 될 수도 있습니다. – pbajpai21

+0

컨텍스트가 null이므로 womg 장소에서 DB 중개인을 초기화하고 있다고 생각합니다. 이 클래스가 시작되는 곳에서 함수 코드를 친절하게 공유하십시오. –

답변

1

나는 문제가이 라인을 생각 :

DbBroker db = new DbBroker(this, "my_database", null, 1); 
SQLiteDatabase sqldb = db.getWritableDatabase(); 
public int test = db.insertTest("New test", "Test created from app"); 

변수가 할당 메모리를 최적화 컴파일러에 정렬됩니다. 그래서 이것들의 순서는 순응하면서 변경 될 수 있습니다. 따라서 시나리오 # 2가 먼저 호출되고 db 인스턴스가 null이므로 예외가 발생했습니다.

수정하려면 onCreate()와 같은 지정된 메서드에 배치하여 이러한 명령을 연속적으로 실행할 수 있습니다.

참고 : 닫는 브래킷이 sqlite 명령 끝에 없습니다.

create table tests (id INTEGER PRIMARY KEY, publicid INTEGER, testname TEXT, description TEXT); 
관련 문제