2016-04-15 6 views
-1

Die folgende Quelle vereinfacht meinen Quellcode.Was ist eine Null Pointer Ausnahme bei getDatabaseLocked(), wie kann ich es beheben?

public class exfragment extends Fragment implements FragmentLifeCycle{ 
    Context mContext; 
    DB db; 

    public exfragment(){ 

    } 

    public exfragment(Context context){ 
     mContext = context; 
    } 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState) 
     db = new DB(mContext, "name.db", null, 1); 
    } 

    public void selectName(){ 
     db = DB.getReadableDatabase(); 
    } 
} 

Dieser Quellcode macht einen Fehler, da kein Konstruktor ohne Argumente ist so, einen Konstruktor ohne Argument hinzufügen.

Nachdem ich die Anwendung einschließlich meiner Quelle ausgeführt habe, klicken Sie auf die Home-Schaltfläche, um sie im Hintergrund auszuführen. und dann habe ich einige Anwendungen ausgeführt, bis sie Speichermangel verursachen. Wenn ich die Anwendung mit meinem Quellcode neu starte, macht die Anwendung FATAL EXCEPTION.

db = DB.getReadableDatabase() method. 

Ich denke, dass es durch Kontextproblem verursacht wird. Da ich Konstruktor ohne Argument einfüge, wird der Kontext Null.

lesen Sie bitte folgende logcat Nachricht

04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: Caused by: java.lang.NullPointerException 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at sslab.com.sms_service.SmsReceiveListFragment.selectSmsList(SmsReceiveListFragment.java:494) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at sslab.com.sms_service.SmsReceiveListFragment.callSmsList(SmsReceiveListFragment.java:189) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at sslab.com.sms_service.SmsReceiveListFragment.onCreateView(SmsReceiveListFragment.java:103) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2042) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:165) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:543) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.app.Activity.performStart(Activity.java:5018) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032) 
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)  
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java:130)  
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)  
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)  
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)  
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4745)  
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)  
04-15 18:47:23.969 24132-24132/sslab.com.sms_service E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)  

Antwort

2

Der Fehler ist, dass Sie eine Null für eine Context-SQLiteOpenHelper Konstruktor haben geben.

Um es in Ihrem Fall zu beheben, verwenden Sie getActivity() anstelle von mContext in Ihrem Fragment.

Verwandte Themen