Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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
Java Android-保存数据时数据库崩溃_Java_Android_Database_Sqlite_Android Fragments - Fatal编程技术网

Java Android-保存数据时数据库崩溃

Java Android-保存数据时数据库崩溃,java,android,database,sqlite,android-fragments,Java,Android,Database,Sqlite,Android Fragments,不确定是什么导致了错误。输出说这是因为我的片段包含数据库逻辑。显然,错误是由addScoutData()引起的和sqLiteDatabase=databaseHelper.getWritableDatabase() 这是片段类 import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.os.Bundle;

不确定是什么导致了错误。输出说这是因为我的片段包含数据库逻辑。显然,错误是由
addScoutData()引起的
sqLiteDatabase=databaseHelper.getWritableDatabase()

这是片段类

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * A simple {@link Fragment} subclass.
 */
public class AddScoutDataFragment extends Fragment {

    Button cancelButton;
    Button addDataButton;
    DatabaseHelper myDB;
    EditText tNumber, tPoticullis, tChevalFrise, tMoat, tRamparts, tDrawbridge, tSallyPort, tRockWall, tRockTerrain, tLowBar;
    Context context = this.getActivity();
    DatabaseHelper databaseHelper;
    SQLiteDatabase sqLiteDatabase;

    public AddScoutDataFragment() {
        // Required empty public constructor
    } //End of AddScoutDataFragment

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_add_scout_data, container, false);
        view.setBackgroundColor(Color.WHITE);

        //Create database
        myDB = new DatabaseHelper(getActivity());

        //Instantiate all editText objects
        tNumber = (EditText) view.findViewById(R.id.editNumber);
        tPoticullis = (EditText) view.findViewById(R.id.editPoticullis);
        tChevalFrise = (EditText) view.findViewById(R.id.editChevalFrise);
        tMoat = (EditText) view.findViewById(R.id.editMoat);
        tRamparts = (EditText) view.findViewById(R.id.editRamparts);
        tDrawbridge = (EditText) view.findViewById(R.id.editDrawbridge);
        tSallyPort = (EditText) view.findViewById(R.id.editSallyPort);
        tRockWall = (EditText) view.findViewById(R.id.editRockWall);
        tRockTerrain = (EditText) view.findViewById(R.id.editRockTerrain);
        tLowBar = (EditText) view.findViewById(R.id.editLowBar);

        //Adds data to ScoutFragment
        addDataButton = (Button) view.findViewById(R.id.buttonDataAdd);
        addDataButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                //Saves data to database
                addScoutInfo();

                //Returns to ScoutFragment
                ScoutFragment fragment = new ScoutFragment();
                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.setCustomAnimations(R.anim.enter_from_left, R.anim.exit_to_right, R.anim.enter_from_right, R.anim.exit_to_left);
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.commit();
            } //End of onClick
        }); //End of setOnClickListener

        //Returns to ScoutFragment without adding any data
        cancelButton = (Button) view.findViewById(R.id.buttonCancel);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Returns to ScoutFragment
                ScoutFragment fragment = new ScoutFragment();
                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.setCustomAnimations(R.anim.enter_from_left, R.anim.exit_to_right, R.anim.enter_from_right, R.anim.exit_to_left);
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.commit();
            } //End of onClick
        }); //End of setOnClickListener
        // Inflates the layout for this fragment
        return view;
    } //End of onCreateView

    public void addScoutInfo(){
        //Converts all editText values into strings
        String sNumber = tNumber.getText().toString();
        String sPoticullis = tPoticullis.getText().toString();
        String sChevalFrise = tChevalFrise.getText().toString();
        String sMoat = tMoat.getText().toString();
        String sRamparts = tRamparts.getText().toString();
        String sDrawbridge = tDrawbridge.getText().toString();
        String sSallyPort = tSallyPort.getText().toString();
        String sRockWall = tRockWall.getText().toString();
        String sRockTerrain = tRockTerrain.getText().toString();
        String sLowBar = tLowBar.getText().toString();

        //Saves data
        databaseHelper = new DatabaseHelper(context);
        sqLiteDatabase = databaseHelper.getWritableDatabase();
        databaseHelper.addInformation(sNumber, sPoticullis, sChevalFrise, sMoat, sRamparts, sDrawbridge, sSallyPort, sRockWall,
                sRockTerrain, sLowBar, sqLiteDatabase);
        Toast.makeText(getContext(), "Data Saved", Toast.LENGTH_LONG).show();
        databaseHelper.close();
    } //End of addScoutInfo
} //End of class
错误日志

3-16 00:36:47.355 5827-5827/com.compscitutorials.basigarcia.ramfernoscout E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                             Process: com.compscitutorials.basigarcia.ramfernoscout, PID: 5827
                                                                                             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
                                                                                                 at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
                                                                                                 at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                                                                                                 at com.compscitutorials.basigarcia.ramfernoscout.AddScoutDataFragment.addScoutInfo(AddScoutDataFragment.java:100)
                                                                                                 at com.compscitutorials.basigarcia.ramfernoscout.AddScoutDataFragment$1.onClick(AddScoutDataFragment.java:58)
                                                                                                 at android.view.View.performClick(View.java:5198)
                                                                                                 at android.view.View$PerformClick.run(View.java:21147)
                                                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
更新内容如下:

databaseHelper = new DatabaseHelper(context);

原因:您的上下文为空

编辑1:

您需要在保存数据之前打开数据库:

databaseHelper = new DatabaseHelper(context);
databaseHelper.open();            
sqLiteDatabase = databaseHelper.getWritableDatabase();

databaseHelper.addInformation(sNumber, sPoticullis, sChevalFrise, sMoat, sRamparts, sDrawbridge, sSallyPort, sRockWall,
                sRockTerrain, sLowBar, sqLiteDatabase);
Toast.makeText(getContext(), "Data Saved", Toast.LENGTH_LONG).show();
databaseHelper.close();

希望这会有意义。

@Sameraabi,发布您的崩溃消息log@SamerAlabi,选中编辑1.open();这不是一个可行的方法unfortunately@HirenPatel上下文不是空的,
getActivity()
可以,他不需要将其更改为
Context
,如果您已经在执行
db.getWritableDatabase()
,那么您甚至不需要调用
db.open()
databaseHelper = new DatabaseHelper(context);
databaseHelper.open();            
sqLiteDatabase = databaseHelper.getWritableDatabase();

databaseHelper.addInformation(sNumber, sPoticullis, sChevalFrise, sMoat, sRamparts, sDrawbridge, sSallyPort, sRockWall,
                sRockTerrain, sLowBar, sqLiteDatabase);
Toast.makeText(getContext(), "Data Saved", Toast.LENGTH_LONG).show();
databaseHelper.close();