getWritableDatabase()在我的应用程序中引发空指针异常 [英] getWritableDatabase() throwing null pointer exception in my apps

查看:36
本文介绍了getWritableDatabase()在我的应用程序中引发空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对getWritableDatabase()的调用遇到麻烦.它返回一个NullPointerException.最奇怪的是,此错误仅在我注释了我的android清单中的几行代码后才开始发生.现在项目回到了原来的位置(我未注释这些部分,但仍然抛出NullPointerException).

I am having trouble with my call to getWritableDatabase(). It is returning a NullPointerException. The thing that is strangest is that this error only began occurring after I commented out a couple lines of code in my android manifest. Now the project is back to where it was (I un-commented those sections and it still throws a NullPointerException).

这是sq-lite开放式文件,它可以分段访问.

this is the sq-lite openhanded file and it access in fragment.

package com.example.cartracking;

import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBLogic extends SQLiteOpenHelper {

    public static String Lock = "dblock";
    private static final String DATABASE_NAME="cartracking.db";
    private static final int DATABASE_VERSION=1;
    private static final String TABLE_NAME="tb_customer";
    public static final String FULL_NAME = "fullname";
    public static final String MOBILE_NO = "mobileno";
    public static final String ADDRESS = "address";
    public static final String HOUSE_NO = "houseno";
    public static final String STREET_NO = "streetno";
    public static final String PIN_CODE = "pincode";
    private SQLiteDatabase database;

    public DBLogic(Context context) {
        super(context,DATABASE_NAME , null, DATABASE_VERSION);
    }

    private static final String DATABASE_CREATE = "create table "
              + TABLE_NAME + "(" + FULL_NAME
              + " text not null," + MOBILE_NO + " text not null," + ADDRESS + " text not null," 
              + HOUSE_NO + " text null," + STREET_NO
              + " text null," + PIN_CODE + " text null" + ")";


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub  
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        String Query1="DROP TABLE IF EXISTS"+TABLE_NAME;
        db.execSQL(Query1);
        onCreate(db);
    }



    public void openDB() throws SQLException{
        synchronized(Lock) {
        Log.e("Hello", "Hi");
        database=getWritableDatabase();
    }
    }

    public void closeDB(){
        synchronized(Lock) {
        database.close();
    }
    }
    //protected void onHandleIntent(Intent intent) {
       // dbHelper = new TasksDBAdapter(this);
       // database.open();
        // Do something
    //}



    public long insertQuery(ContentValues cValues){
        return database.insert(TABLE_NAME, null, cValues);
    }

    public int updateQuery(ContentValues cValues){
        String WHERE="_id="+cValues.getAsString("_id");
        return database.update(TABLE_NAME, cValues, WHERE, null);
    }

    public int deleteQuery(String id){
        String WHERE="_id="+id;
        return database.delete(TABLE_NAME, WHERE, null);
    }



    public Cursor getString(String[] colName){
        Cursor cursor=database.query(TABLE_NAME, colName, null, null, null, null, null);
        return cursor;
    }
}

可访问sq-lite openhanded文件的另一个Java文件....

another java file which sq-lite openhanded file is access....

package com.example.cartracking;

import android.app.Fragment;
import android.content.ContentValues;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class CustomerRegister extends Fragment {
    private EditText fulname,mobile,address,house_no,street_no,pincode;
    private Button clear,registration;
    String fullName,contact,adr,houseNo,streetNo,PinCode;
    private final DBLogic logic=new DBLogic(getActivity());
    public CustomerRegister(){}
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.customer_register, container, false);

        logic.openDB();


        Button reset = (Button)rootView.findViewById(R.id.btn2);

        fulname=(EditText)rootView.findViewById(R.id.editText7);
        mobile=(EditText)rootView.findViewById(R.id.editText8);
        address=(EditText)rootView.findViewById(R.id.editText9);
        house_no=(EditText)rootView.findViewById(R.id.editText10);
        street_no=(EditText)rootView.findViewById(R.id.editText11);
        pincode=(EditText)rootView.findViewById(R.id.editText12);
        Button registration = (Button)rootView.findViewById(R.id.btn1);

        registration.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                fullName=fulname.getText().toString();
                contact=mobile.getText().toString();
                adr=address.getText().toString();
                houseNo=house_no.getText().toString();
                streetNo=street_no.getText().toString();
                PinCode=pincode.getText().toString();

                String columns[]={"full_name","mobile_no","address","house_no","steet_no","pin_code"};
                String colValues[]={fullName,contact,adr,houseNo,streetNo,PinCode};
                ContentValues cValues=new ContentValues();
                 for(int i=0;i<columns.length;i++){
                     cValues.put(columns[i], colValues[i]);
                 }
                 try{
                     long id=logic.insertQuery(cValues);
                     Toast.makeText(getActivity(), "Row Id is:"+id, 0).show();
                 }
                 catch(Exception e){
                     Toast.makeText(getActivity(), "Error", 0).show();
                 }
                }
            });

        reset.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

            }

        });
        return rootView;
    }   
}

引发空指针错误.

Logcat提供-

05-04 01:08:22.870: E/Hello(1705): Hi
05-04 01:08:22.900: E/AndroidRuntime(1705): FATAL EXCEPTION: main
05-04 01:08:22.900: E/AndroidRuntime(1705): Process: com.example.cartracking, PID: 1705
05-04 01:08:22.900: E/AndroidRuntime(1705): java.lang.NullPointerException
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at com.example.cartracking.DBLogic.openDB(DBLogic.java:56)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at com.example.cartracking.CustomerRegister.onCreateView(CustomerRegister.java:27)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.app.Fragment.performCreateView(Fragment.java:1700)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.app.BackStackRecord.run(BackStackRecord.java:684)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.os.Handler.handleCallback(Handler.java:733)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.os.Handler.dispatchMessage(Handler.java:95)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.os.Looper.loop(Looper.java:136)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at android.app.ActivityThread.main(ActivityThread.java:5017)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at java.lang.reflect.Method.invokeNative(Native Method)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at java.lang.reflect.Method.invoke(Method.java:515)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-04 01:08:22.900: E/AndroidRuntime(1705):     at dalvik.system.NativeStart.main(Native Method)

推荐答案

传递给数据库帮助器的 Context 为空.实例化片段时,片段未附加到活动,并且 getActivity()返回null.将db helper初始化移至片段生命周期的后期,例如 onCreate().

The Context passed to your db helper is null. Your fragment is not attached to an activity when instantiating it and getActivity() returns null. Move the db helper initialization to a later phase of the fragment lifecycle such as onCreate().

这篇关于getWritableDatabase()在我的应用程序中引发空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆