Android 无法在片段内创建类的对象

Android 无法在片段内创建类的对象,android,android-fragments,Android,Android Fragments,在片段中创建另一个类的对象时遇到问题。我的代码是 public View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) { TextView tv = (TextView) getActivity().findViewById(R.id.textView3); (/*ERROR LINE*/)Database info = new Database(t

在片段中创建另一个类的对象时遇到问题。我的代码是

public View onCreateView(LayoutInflater layoutinflater,
        ViewGroup viewgroup, Bundle bundle) {
    TextView tv = (TextView) getActivity().findViewById(R.id.textView3);
    (/*ERROR LINE*/)Database info = new Database(this);
    info.open();
    String data = info.getData();
    info.close();
    tv.setText(data);
    return layoutinflater.inflate(R.layout.sqlview, viewgroup, false);
}
但它告诉我修改数据库类中的构造函数,该类以上下文作为参数。 请帮助。

尝试使用

Database info = new Database(getActivity());

getActivity()
返回与片段关联的活动,由于
activity
继承自
Context
,您可以将其用作构造函数的参数。

使用Merlevede回答您的问题,但运行此应用程序后,您必须在以下方面获得NullPointerException错误:

tv.setText(data);
因为
tv
null

TextView tv = (TextView) getActivity().findViewById(R.id.textView3);
textView3
打开
sqlview
。因此,您必须使用以下代码更改代码:

public View onCreateView(LayoutInflater layoutinflater,
        ViewGroup viewgroup, Bundle bundle) {
    View v = layoutinflater.inflate(R.layout.sqlview, viewgroup, false);
    TextView tv = (TextView) v.findViewById(R.id.textView3);
    Database info = new Database(getActivity());
    info.open();
    String data = info.getData();
    info.close();
    tv.setText(data);
    return v;
}

您必须在Database.java中添加构造函数

class Database extends SQLiteOpenHelper{

    public Database(Context context) {
        super(context, "Your Database Name", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // write you create table query here.
    }


    // other method to get data...



}

这将解决您的构造函数问题。

您可能在以下行中也有错误:(TextView)getActivity().findViewById(R.id.textView3);。此文本视图是否在
sqlview
上?是的。我没有错误,谢谢。你会告诉我它正在给我一个NPESpot的!!我不太明白为什么电视是空的。你把
textView3
放在
sqlview
上,但是你想用
getActivity()
方法访问它,
getActivity
返回你的活动布局,它是另一个布局,你需要这个布局来访问
textView3
,所以你需要首先声明你的视图并使用
v.findViewById()
我不知道你到底在哪里可以读到这个,但是当你膨胀其他布局并想在这个布局上使用小部件时,你必须这样做,就像在自定义适配器和许多其他地方一样,我希望你能理解我