私の質問を読んでくれてありがとう。Android:sqliteデータベーステーブルを作成するためのバンドル文字列の取得
フルテキスト検索を実行するためにテーブルの列を選択できるようにするアプリを作成する予定です。したがって、私はバンドル文字列にユーザー入力を取得し、これをSQLiteOpenHelperに渡そうとします。ただし、SQLOpenHelperは文字列を取得できません。次のように私のコードスニペットは、次のとおりです。
ActivityA.java
public class ActivityA extends Activity {
...
//get the selected dropdown list value
public void addListenerOnButton(final Spinner sp1, final Spinner sp2, final MultiSpinner msp1, final MultiSpinner msp2) {
btnSubmit = (Button) findViewById(R.id.btnSubmit);
btnSubmit.setOnClickListener(new OnClickListener() {
//@Override
public void onClick(View v) {
strpkey = String.valueOf(sp1.getSelectedItem());
strskey = String.valueOf(sp2.getSelectedItem());
stronscreen = String.valueOf(msp1.getSelectedItem());
strwhenclick = String.valueOf(msp2.getSelectedItem());
Intent intent = new Intent();
intent.setClass(ActivityA.this, ActivityB.class);
Bundle bundle = new Bundle();
bundle.putString("Pkey", strpkey);
bundle.putString("Skey", strskey);
bundle.putString("Onscreen", stronscreen);
bundle.putString("Whenclick", strwhenclick);
intent.putExtras(bundle);
startActivity(intent);
}
注:私は問題はActivityAにあるとは思わないので、ActivityBにバンドル文字列を取得することができています。
ActivityB.java
public class ActivityB extends Activity {
public String strpkey, strskey;
public String stronscreen;
private DbAdapter dbHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.countsheet);
strpkey = getfilepath("Pkey");
strskey = getfilepath("Skey");
stronscreen = getfilepath("Onscreen");
Toast.makeText(this, strpkey + " " + strskey + " " + stronscreen, Toast.LENGTH_LONG).show();
dbHelper = new DbAdapter(this);
dbHelper.open();
public String getfilepath(String strbundletext) {
Bundle bundle = this.getIntent().getExtras();
String csvpath = bundle.getString(strbundletext);
return csvpath;
}
...
}
DBAdapter.java
import com.ksgrp.stocktake.ActivityB;
public class DbAdapter {
public static class DatabaseHelper extends SQLiteOpenHelper {
public ListDesign csobj2 = new ListDesign();
public String pkey = csobj2.strpkey;
private String skey = csobj2.strskey;
public String onscreen = csobj2.stronscreen;
private String getstr(String pkey, String skey) {
ActivityB csobj = new ActivityB();
String pkey = csobj.strpkey;
String skey = csobj.strskey;
String onscreen = csobj.stronscreen;
String sqlstr = "CREATE VIRTUAL TABLE " + vdb_tbl + " USING fts3(" + sqlstr + ")";
return sqlstr;
}
//@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String strsql = getstr(this.pkey, this.skey);
db.execSQL("DROP TABLE IF EXISTS " + vdb_tbl);
db.execSQL(strsql);
Log.w("TAG", strsql);
}
}
私はActivityAにあるボタンをクリックしたとき、私はJavaのnullポインタ例外を取得:
03-08 14:04:31.569: E/AndroidRuntime(29573): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ksgrp.stocktake/com.ksgrp.stocktake.ActivityB}: android.database.sqlite.SQLiteException: vtable constructor failed: stocklist2: CREATE VIRTUAL TABLE stocklist2 USING fts3(null, null)
私はで値を取得することができませんと信じてバンドル文字列をDBAdapterクラスに追加します。誰も私にこれに手を差し伸べることはできますか?私は、完全なコードを提供することができます(しかし、私はちょうど上記の関連するビットを抽出した長いです)。
...それがお役に立てば幸いです。 intent.putString( "Skey"、strskey); intent.putString( "Onscreen"、stronscreen); intent.putString( "Whenclick"、strwhenclick); – kosa
あなたの返事をありがとう。しかし、私は問題がintent.putExtraステートメントにあるとは思わないが、データベースステートメントをコメントアウトするとToastを表示できるようになる – kwytse
何が間違っていると思うかsqlstr = "CREATE VIRTUAL TABLE" + vdb_tbl + "fts3(" + sqlstr + ")"を使用すると、sqlStrをフィールドとして渡していますが、間違っています。パラメータとして取得している列を渡す必要があります。このリンクを参照してくださいhttp://blog.andresteing.com/2011/09/30/android-quick-tip-using-sqlite-fts-tables/ – kosa