我有一个应用程序,用户可以在名为LIST的活动中存储数据。应用启动时,用户需要编写列表名称。比活动显示带有EditText的用户可以在其中存储一些数据。
我遇到的问题是:我想在数据库中创建不同的表。这些列表中的每一个列表之一。因此,每次用户启动新列表时,都应创建一个新表。表的名称将由用户定义。每个列表都有其表,表名就是列表名。
我正在尝试使用Intent获取列表名称字符串,并在我的OpenHelper类中恢复它,但是它不起作用。老实说,我不知道这是否正确,所以我正在寻找您的帮助。
如何获取字符串并将其用作表名?
谢谢!
这是我的代码:
在这里,我得到了字符串,表的名称。可行!
Intent intent2 = new Intent(ColetaListaActivity.this, OpenHelper.class);
intent2.putExtra("nomelista", nomeLista);
startActivity(intent2);
这是我的OpenHelper:
实际上,它说需要getIntent方法。而且我不知道该怎么办。
public class OpenHelper extends SQLiteOpenHelper {
private static final String NOME_BANCO = "codigoslista.db";
private static final int VERSAO_BANCO = 1;
public String nomelistafinal;
public OpenHelper(Context ctx) {
super(ctx, NOME_BANCO, null, VERSAO_BANCO);
}
@Override
public void onCreate(SQLiteDatabase db) {
//pega nome da lista
Bundle bundle = getIntent().getExtras();
nomelistafinal = bundle.getString("nomelista");
//db.execSQL("CREATE TABLE CODIGOS(codigo text not null) ");
db.execSQL("CREATE TABLE " + nomelistafinal + "(codigo text not null) ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//db.execSQL("DROP TABLE CODIGOS");
db.execSQL("DROP TABLE " + nomelistafinal);
onCreate(db);
}
}
谢谢!
答案 0 :(得分:0)
您只需在活动中实例化数据库类
OpenHelper mOpenHelper = new OpenHelper(this);
并在db类中创建一个方法来创建表
public void createTable(String nomelistafinal ) {
final SQLiteDatabase db = getWritableDatabase();
db.execSQL("CREATE TABLE " + nomelistafinal + " (codigo text not null) ");
db.close();
}
答案 1 :(得分:0)
OpenHelper不是活动,因此您无法像将其作为活动一样启动它。由于它不是Activity或从Activity继承,因此它没有 getIntent 方法。
您需要执行另一个活动,然后说StoreData -开始该活动, -在该活动的 onCreaate 方法中获取意图附加项 =再次通过 onCreate 方法实例化OpenHelper对象 -然后,您可以通过该数据库访问数据库中的表 -例如将输入的数据存储在该活动中 -您还需要删除获取Intent附加内容的尝试。
下面是一个简单的示例,该示例将 List 活动中的字符串(值为 mydata )传递给 StoreData 活动。 / p>
StoreData 活动,该活动允许用户在编辑文本中输入一些数据,然后单击“保存数据”按钮。
单击保存数据按钮将存储通过意图( mydata )传递的文本与用户输入的数据(如果单击而未输入任何内容,则为行将不会添加,并且Toast将对此进行指示)。如果成功添加了该行,则Toast会对此进行确认。
这是另一个按钮 LOG DATA(如果有),如果单击此按钮并且已保存任何行,则将使用DataBaseUtils dumpCursor < / strong>方法。
例如:0-
2019-01-19 16:56:26.166 7477-7477/mjt.test001 I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@8f5d8ba
2019-01-19 16:56:26.167 7477-7477/mjt.test001 I/System.out: 0 {
2019-01-19 16:56:26.167 7477-7477/mjt.test001 I/System.out: codigo=mydataTEST
2019-01-19 16:56:26.167 7477-7477/mjt.test001 I/System.out: }
2019-01-19 16:56:26.167 7477-7477/mjt.test001 I/System.out: <<<<<
代码如下
public class List extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent i = new Intent(this,StoreData.class);
i.putExtra("nomelista","mydata");
// NOTE starts the 2nd activity straight away
startActivity(i);
}
}
public class OpenHelper extends SQLiteOpenHelper {
private static final String NOME_BANCO = "codigoslista.db";
private static final int VERSAO_BANCO = 1;
public static String nomelistafinal = "the_table_name"; //<<<<<<<<<< CHANGED
public OpenHelper(Context ctx) {
super(ctx, NOME_BANCO, null, VERSAO_BANCO);
}
@Override
public void onCreate(SQLiteDatabase db) {
//pega nome da lista
//Bundle bundle = getIntent().getExtras(); //<<<<<<<<< COMMENTD OUT
//nomelistafinal = bundle.getString("nomelista"); //<<<<<<<<< COMMENTED OUT
//db.execSQL("CREATE TABLE CODIGOS(codigo text not null) ");
db.execSQL("CREATE TABLE " + nomelistafinal + "(codigo text not null) ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//db.execSQL("DROP TABLE CODIGOS");
db.execSQL("DROP TABLE " + nomelistafinal);
onCreate(db);
}
/**
* Store some data
* @param codigo
* @return the rowid of the inserted row
*/
public long storeData(String codigo) {
ContentValues cv = new ContentValues();
cv.put("codigo",codigo);
SQLiteDatabase db = this.getWritableDatabase();
return db.insert(nomelistafinal,null,cv);
}
/**
* Dump all data from the nomlistafinal table
*/
public void logData() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(nomelistafinal,null,null,null,null,null,null);
DatabaseUtils.dumpCursor(csr);
csr.close();
}
}
public class StoreData extends AppCompatActivity {
EditText mMyData;
Button mSave, mLogData;
OpenHelper mOpnHlpr;
String mCurrentNomlist;
long mLastIDAdded;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_store_data);
mMyData = this.findViewById(R.id.mydata);
mSave = this.findViewById(R.id.save);
mOpnHlpr = new OpenHelper(this);
mCurrentNomlist = getIntent().getStringExtra("nomelista");
setupUI();
}
private void setupUI() {
mMyData = this.findViewById(R.id.mydata);
mSave = this.findViewById(R.id.save);
// Add the OnClick Listener
mSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do nothing if there is no data
if (mMyData.getText().toString().length() < 1) {
Toast.makeText(StoreData.this, "Not Added as there is nothing to add.", Toast.LENGTH_SHORT).show();
return;
}
// Otherwise addd a row
if ((mLastIDAdded = mOpnHlpr.storeData(mCurrentNomlist + mMyData.getText().toString())) > 0) {
Toast.makeText(StoreData.this,"Added row with an ID of " + String.valueOf(mLastIDAdded),Toast.LENGTH_SHORT).show();
}
}
});
mLogData = this.findViewById(R.id.logdata);
mLogData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (DatabaseUtils.queryNumEntries(mOpnHlpr.getWritableDatabase(),OpenHelper.nomelistafinal) > 0) {
mOpnHlpr.logData();
}
}
});
}
}