Android: получение строки пакета для создания таблицы базы данных sqlite - PullRequest
0 голосов
/ 08 марта 2012

Спасибо, что уделили время на чтение моего вопроса.

Я планирую написать приложение, которое позволит пользователю выбирать столбцы таблицы для выполнения полнотекстового поиска. Поэтому я получаю пользовательский ввод в строку пакета и пытаюсь передать его в 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);                                
}

Примечание: я могу получить строку пакета в ActivityB, поэтому я не думаю, что проблема заключается в ActivityA.

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:

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. Кто-нибудь может мне помочь? Я могу предоставить полный код (но он длинный, поэтому я только что извлек соответствующие биты выше).

1 Ответ

0 голосов
/ 24 апреля 2012

Полагаю, вам следует попытаться получить выбранное значение счетчика в ` and not onButtonClick`.

Таким образом, вместо strpkey = String.valueOf(sp1.getSelectedItem()); в onButtonClick,

попробуйте

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

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

и используйте это strpkey непосредственно в onButtonClick.

Аналогично для других 3 счетчиков.

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...