Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android getWritableDatabase()在我的应用程序中引发空指针异常_Android_Eclipse - Fatal编程技术网

Android getWritableDatabase()在我的应用程序中引发空指针异常

Android getWritableDatabase()在我的应用程序中引发空指针异常,android,eclipse,Android,Eclipse,调用getWritableDatabase()时遇到问题。它正在返回NullPointerException。最奇怪的是,在我注释掉android清单中的几行代码后,这个错误才开始出现。现在项目回到了原来的位置(我取消了对这些部分的注释,它仍然抛出一个NullPointerException) 这是sq-lite徒手文件,它以片段形式访问 package com.example.cartracking; import android.content.ContentValues; import

调用getWritableDatabase()时遇到问题。它正在返回NullPointerException。最奇怪的是,在我注释掉android清单中的几行代码后,这个错误才开始出现。现在项目回到了原来的位置(我取消了对这些部分的注释,它仍然抛出一个NullPointerException)

这是sq-lite徒手文件,它以片段形式访问

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;
    }
}
另一个java文件是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;
    }   
}

传递给db助手的
上下文
为空。实例化活动时,您的片段未附加到该活动,并且
getActivity()
返回null。将db helper初始化移动到片段生命周期的稍后阶段,例如
onCreate()

我强烈建议您在使用代码时使用版本控制系统。这使得回滚更改并使项目恢复到工作状态变得非常容易。
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)