gpt4 book ai didi

android - 更改sqlite数据库的名称

转载 作者:行者123 更新时间:2023-11-29 02:18:00 25 4
gpt4 key购买 nike

我正在开发一个程序,我想在其中创建多个 SQLite 数据库。我编写了一个用户可以在其中选择数据库名称的 Activity ,但我无法将该名称发送到打开数据库的 Activity 。

我一直在从 Big Nerd Ranch Guide 学习 Android 编程,因为我想存储项目列表,所以我从那本书中的 criminalIntent 程序开始。

为了选择 SQLite 数据库的名称,我创建了另一个包含数据库名称列表的数据库。用户按下按钮选择名称,但随后我想在另一个 Activity 中使用该名称打开 SQLite 数据库。

我的做法是:(代码见文末)用户在DataSetListFragment中选择SQLite数据库的名称,然后在InstructLab(与CriminalIntent中的CrimeLab几乎相同)中打开数据库。我声明了一个变量 sScheduleName,它是 SQLite 数据库的名称。首先在 DataSetListFragment 中,我尝试使用 InstructLab setter 方法分配数据库的名称。然后,当我创建 InstructLab 的实例时,sScheduleName 为空。

我尝试过其他想法。我使用 putExtra 将数据库的名称返回给主 Activity 。从 MainActivity 中,用户选择另一个 Activity ,该 Activity 将使用 putExtra 中返回的名称列出 SQLite 数据库的内容。但是,在使用 SQLite 数据库名称之前有几层代码,我不知道如何使用 putExtra 发送名称,然后在代码中需要它的位置检索它。

我不太确定应该采取什么方法才能在数据库打开时将有关数据库名称的信息从 DataSetListFragment 获取到 InstructLab 实例,所以有人可以指出正确的方向吗?

谢谢。

公共(public)类 DataSetListFragment 扩展 fragment {

private String mCurrentFile;

public DataSetHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_dataset_info);
mNameButton = (Button) itemView.findViewById(R.id.choose_schedule_name);
mNameButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
DataSetLab.get(getActivity()).setCurrentData(mTitleTextView.getText().toString());
InstructLab.get(getActivity()).setScheduleName(mTitleTextView.getText().toString());
Log.d(TAG, "send back to MainActivity: "+mTitleTextView.getText().toString());
intent.putExtra(EXTRA_NAME,mTitleTextView.getText().toString());
getActivity().setResult(Activity.RESULT_OK,intent);
getActivity().finish();

}
});
}

公共(public)课 InstructLab { 私有(private)静态 InstructLab sInstructLab;

private Context mContext;
private SQLiteDatabase mDatabase;
private static String sScheduleName;

public String getScheduleName() {
return sScheduleName;
}

public void setScheduleName(String scheduleName) {
this.sScheduleName = scheduleName;
Log.d(TAG,"Assigning database name:"+sScheduleName);
}



public static InstructLab get(Context context) {
if (sInstructLab == null) {

sInstructLab = new InstructLab(context);
}
return sInstructLab;
}

private InstructLab(Context context) {
mContext = context.getApplicationContext();
Log.d(TAG,"Opening Database "+sScheduleName);
mDatabase = new InstructBaseHelper(mContext,sScheduleName).getWritableDatabase();
Log.d(TAG,"Opening Database "+sScheduleName);
}

最佳答案

Fragment 是Activity 上的 View 组,您不需要使用setresult 来更新您的Activity。您可以只使用一个接口(interface)与 Activity 进行通信。

public class DataSetListFragment extends Fragment {

private String mCurrentFile;

public DataSetHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_dataset_info);
mNameButton = (Button) itemView.findViewById(R.id.choose_schedule_name);
mNameButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
((YourActivity)getActivity()).onDataSetLab(DataSetLab.get(getActivity()).setCurrentData(mTitleTextView.getText().toString()));
((YourActivity)getActivity()).onInstructLab(InstructLab.get(getActivity()).setScheduleName(mTitleTextView.getText().toString()));

}
});
}

public interface DBNameListener {
public void onDataSetLab(String name);
public void onInstructLab(String name);
}

}

然后,在您的 Activity 中,只需实现 DBNameListener,

public class YourActivity extends Activity implements DatasetListFragment.DBNameListener {

@Override
public void onDataSetLab(String name) {
// do your stuff
}

@Override
public void onInstructLab(String name) {
// do your stuff
}
}

关于android - 更改sqlite数据库的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com