我想使用AsyncTask将现有sqlite数据库中的列项显示为autocompletetextview

时间:2016-01-14 06:37:30

标签: java android sqlite android-asynctask

这是getall()

中的DataBaseHelper方法
public ArrayList<String> getAll(){
        ArrayList<String> listUsers = new ArrayList<String>();
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor c;

        try {
            c = db.rawQuery("SELECT * FROM bank"  , null);
            if(c == null) return null;

            String name;
            c.moveToFirst();
            do {
                name = c.getString(1);
                listUsers.add(name);
            } while (c.moveToNext());
            c.close();
        } catch (Exception e) {
            Log.e("blushmaq", e.getMessage());
        }

        db.close();

        return listUsers;
    }

这是我要用getall()

中的DataBaseHelper方法填充记录的其他类
public class BankInfo extends ActionBarActivity {


    private Toolbar toolbar;
    Button searchButton;
    DataBaseHelper myDbHelper = new DataBaseHelper(this);
    TextView sample;
    AutoCompleteTextView t1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bank_info);

        sample = (TextView) findViewById(R.id.sampleTextView);
        searchButton = (Button) findViewById(R.id.searchButton);
        searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DBOperations().execute();
            }
        });

        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        DBOperations.execute(true);
        try {
            myDbHelper.createDataBase();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private class DBOperations extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... params) {

            return params[0];
        }

        @Override
        protected void onPostExecute(String s) {

            ArrayList<String> brands = myDbHelper.getAll();
            t1 = (AutoCompleteTextView) findViewById(R.id.bank_name);
            if(brands != null){
                ArrayAdapter<String> adapter=new ArrayAdapter<String>(BankInfo.this,android.R.layout.simple_dropdown_item_1line,brands);
                t1.setThreshold(1);
                t1.setAdapter(adapter);
            }
            sample.setText(s);
            myDbHelper.close();
        }
    }

我收到错误ArrayIndexOutofBoundException Length=0 Index=0

2 个答案:

答案 0 :(得分:0)

您的数据库似乎没有任何值,或者您没有正确声明任何数组。 并使用brand.size()&gt; 0检查条件“if(brands!= null)”。

答案 1 :(得分:0)

  

重新安装该应用。

原因是,

  1. 您可以创建项目并为数据库添加代码。
  2. 2.安装应用程序。

    3.在数据库中进行任何更改

    此时数据库未更新。

    这样做。

    只需使用onUpgrade(作为覆盖)方法,就可以将数据库升级放在那里。这样,当已经安装了应用程序时,现有数据都不会被吹走。

    并确保你不要像现在一样放弃桌子:

    db.execSQL("DROP TABLE IF EXISTS bank");
    

    如果你不想这样做。

    卸载应用并重新安装

    参考How to Update Database changes to already Installed Application