2013-09-21 29 views
4

我正在处理android上的sqlite数据库项目。这是我第一个sqlite项目。我读了很多文章并创建了我的应用程序,但存在一个问题,我无法找到解决方法。我希望你能为我展示一条道路。 问题是,当我通过单击按钮调用活动时,设备启动了一条消息(“不幸的应用程序已停止”)。Android从sqlite数据库获取字符串到自动完成文本视图

我想从sqlite数据库的字符串到autocompletetextview。

SQLite的databasehelper类的代码

package com.example.matik; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 

public class Veritabani extends SQLiteOpenHelper { 

     private static final String VERITABANI="KAYISGDATA.db"; 
     private static final int SURUM=1; 

     public static final String TABLE_TODO = "nace"; 
     public static final String COLUMN_ID = "_id"; 
     public static final String COLUMN_CATEGORY = "KOD"; 
     public static final String COLUMN_SUMMARY = "ACK"; 
     public static final String COLUMN_DESCRIPTION = "TEH"; 

     private static final String DB_DROP = "DROP TABLE IF EXISTS nace"; 
     private static final String DATABASE_CREATE = "create table " 
        + TABLE_TODO 
        + "(" 
        + COLUMN_ID + " integer primary key autoincrement, " 
        + COLUMN_CATEGORY + " text not null, " 
        + COLUMN_SUMMARY + " text not null," 
        + COLUMN_DESCRIPTION 
        + " text not null" 
        + ");"; 

    public Veritabani(Context con, String name, CursorFactory factory, 
      int version) { 
     super(con, VERITABANI, null, SURUM); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(DATABASE_CREATE); 
     db.execSQL("INSERT INTO nace (KOD,ACK,TEH) VALUES('01.11.07','Baklagillerin yetiştirilmesi','Tehlikeli')");} 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL(DB_DROP); 
     onCreate(db); 
    } 


} 

活动类的代码

package com.example.matik; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.AutoCompleteTextView; 
import android.widget.EditText; 

public class Matik extends Activity { 
    AutoCompleteTextView auto; 
    EditText nc; 
    EditText th; 
    Veritabani VB; 
    private ArrayAdapter<String> arrayAdapter; 
    ArrayList<String> Liste = new ArrayList<String>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_matik); 
     Liste = new ArrayList<String>(); 
     doldur(); 
     nc = (EditText) findViewById(R.id.editText2); 
     th = (EditText) findViewById(R.id.editText3); 
     auto = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); 
     arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.select_dialog_item, Liste); 
     auto.setThreshold(1); 
     auto.setAdapter(arrayAdapter); 
    } 

    private void doldur() { 
     SQLiteDatabase Db = VB.getReadableDatabase(); 
     Cursor c = Db.rawQuery("Select ACT From nace", null); 
     Db.isOpen(); 
     while(c.moveToNext()){ 
      Liste.add(c.getString(c.getColumnIndex("ACT"))); 
     }; 


    } 

} 
+0

使用LogCat检查在出现“应用程序已停止”对话框时生成的Java堆栈跟踪。 – CommonsWare

+0

LogCat上的致命异常主错误 –

+0

我建议您阅读如何解释Java堆栈跟踪,因为这对于您在Java开发中很重要:http://stackoverflow.com/questions/3988788/what-is- a-stack-trace-and-how-can-i-use-it-to-debug-my-application-errors http://stackoverflow.com/questions/12688068/how-to-read-and-understand-the -java-stack-trace如果您很难理解错误消息的含义,请将* entire *堆栈跟踪复制并粘贴到您的StackOverflow问题中。 – CommonsWare

回答

4

使用SimpleCursorAdapter,如在this article所示。

_descriptionText = (AutoCompleteTextView) findViewById(R.id.description); 
final int[] to = new int[]{android.R.id.text1}; 
final String[] from = new String[]{VehicleDescriptionsTable.DESCRIPTION}; 
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
     android.R.layout.simple_dropdown_item_1line, 
     null, 
     from, 
     to); 

// This will provide the labels for the choices to be displayed in the AutoCompleteTextView 
adapter.setCursorToStringConverter(new SimpleCursorAdapter.CursorToStringConverter() { 
    @Override 
    public CharSequence convertToString(Cursor cursor) { 
     final int colIndex = cursor.getColumnIndexOrThrow(VehicleDescriptionsTable.DESCRIPTION); 
     return cursor.getString(colIndex); 
    } 
}); 

// This will run a query to find the descriptions for a given vehicle. 
adapter.setFilterQueryProvider(new FilterQueryProvider() { 
    @Override 
    public Cursor runQuery(CharSequence description) { 
     String vehicle = getSelectedVehicle(); 
     Cursor managedCursor = _helper.getDescriptionsFor(vehicle, description.toString()); 
     Log.d(TAG, "Query has " + managedCursor.getCount() + " rows of description for " + vehicle); 
     return managedCursor; 
    } 
}); 

_descriptionText.setAdapter(adapter); 

从这里,你只需要添加一个函数返回一个指针与您的数据库,适配器添加到您的AutoTextCompleteTextView。您需要从日志查询中获取_id,实际上,您可能会考虑获取整行(SELECT * FROM table)。如果您没有列_id,请尝试SELECT data, rowid AS _id FROM table

相关问题