Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 在片段内打开数据库_Java_Android_Fragment - Fatal编程技术网

Java 在片段内打开数据库

Java 在片段内打开数据库,java,android,fragment,Java,Android,Fragment,在片段java文件中打开数据库时遇到问题。 我用过这个,它和我的问题非常相似,尽管它不起作用 public class fragmentBmi extends Fragment { DatabaseHandler db = new DatabaseHandler(getActivity()); //DATABASE public fragmentBmi() { // Required empty public constructor } @O

在片段java文件中打开数据库时遇到问题。 我用过这个,它和我的问题非常相似,尽管它不起作用

public class fragmentBmi extends Fragment {
    DatabaseHandler db = new DatabaseHandler(getActivity()); //DATABASE

    public fragmentBmi() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_bmi, container, false);
        TextView bmi = (TextView) v.findViewById(R.id.BMI);
        if(db.checkDetails()){ // Check if db is empty, if not print on screen bmi,bmr,rmr. if does print message.
            Details d = db.getDetails();
            bmi.setText(String.format("BMI: %.2f", d.getBmi()));
        }
        else{
            bmi.setText(R.string.noneInfo);
        }
        return v;
    }


}
错误:

java.lang.NullPointerException:尝试调用虚拟方法 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabasejava.lang.String,int, android.database.sqlite.SQLiteDatabase$CursorFactory, 空对象引用上的android.database.DatabaseErrorHandler

我还尝试了上下文变量,也给出了相同的错误。 有没有在片段java文件中打开数据库的解决方案?

您不能在实例变量中使用getActivity方法,因为此时尚未创建活动,该方法返回null。要解决此问题,必须移动此行DatabaseHandler db=new DatabaseHandlergetActivity;要激活已创建的方法,请执行以下操作:

不能将getActivity方法用于实例变量,因为此时尚未创建活动,该方法返回null。要解决此问题,必须移动此行DatabaseHandler db=new DatabaseHandlergetActivity;要激活已创建的方法,请执行以下操作:


当您尝试使用db对象时,错误提示为null

尝试改变

DatabaseHandler db = new DatabaseHandler(getActivity()); //DATABASE
为了

在onCreateView中,在视图v=

db = new DatabaseHandler(getContext());

当您尝试使用db对象时,错误提示为null

尝试改变

DatabaseHandler db = new DatabaseHandler(getActivity()); //DATABASE
为了

在onCreateView中,在视图v=

db = new DatabaseHandler(getContext());

DB在变量初始化块中初始化,这意味着它在构造函数之前执行。更多信息:。getActivity在片段生命周期的这一点返回null有关片段生命周期的更多信息,请参见:


您需要在片段本身初始化之后启动db。

您的db在变量初始化块中初始化,这意味着它在构造函数之前执行。更多信息:。getActivity在片段生命周期的这一点返回null有关片段生命周期的更多信息,请参见:

您需要在片段本身初始化之后启动db