2012-03-08 7 views
0

私の質問を読んでくれてありがとう。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クラスに追加します。誰も私にこれに手を差し伸べることはできますか?私は、完全なコードを提供することができます(しかし、私はちょうど上記の関連するビットを抽出した長いです)。

+0

...それがお役に立てば幸いです。 intent.putString( "Skey"、strskey); intent.putString( "Onscreen"、stronscreen); intent.putString( "Whenclick"、strwhenclick); – kosa

+0

あなたの返事をありがとう。しかし、私は問題がintent.putExtraステートメントにあるとは思わないが、データベースステートメントをコメントアウトするとToastを表示できるようになる – kwytse

+0

何が間違っていると思うかsqlstr = "CREATE VIRTUAL TABLE" + vdb_tbl + "fts3(" + sqlstr + ")"を使用すると、sqlStrをフィールドとして渡していますが、間違っています。パラメータとして取得している列を渡す必要があります。このリンクを参照してくださいhttp://blog.andresteing.com/2011/09/30/android-quick-tip-using-sqlite-fts-tables/ – kosa

答えて

0

私は、` and not onButtonClick`でスピナーの選択値を取得するようにしてください。代わりにonButtonClickstrpkey = String.valueOf(sp1.getSelectedItem());

のだから、

は、

sp1.setOnItemSelectedListener(new OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> parentView View selectedItemView, int position, long id) { 

      strpkey =sp1.getItemAtPosition(position).toString(); 
      } 

onButtonClickで直接このstrpkeyを使用してみてください。

他の3つのスピナーについても同様です。

は、私は同じ問題を抱えて覚えて、あなたはintent.putExtra(「PKEY」、strpkey)にこれらのステートメントを変更することができます

関連する問題