2016-06-14 10 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クラスですが:

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); 
    } 
} 

私はプロジェクトを実行すると、このエラーは、アプリケーションを停止します。

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

誰がアンダーに私を助けることができますどこに問題がありますか?

+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-contactsフラグメント http://stackoverflow.com/questions/29545524/android-nullpointerexception-データベースへの読み込みができない - データベース内のリストビュー - 希望すると、問題が解決する場合があります。 – pbajpai21

+0

私はあなたがあなたのDBブローカーをどのコンテキストがnullなのでwomgの場所で初期化していると思います。このクラスが開始される場所から関数コードを親切に共有してください。 –

答えて

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); 
関連する問題

 関連する問題