2013-08-06 34 views
7

Chương trình của tôi chứa Activityclass và cơ sở dữ liệu class. Mã tôi đã sử dụng để lưu các giá trị cơ sở dữ liệu vào ListView có một số vấn đề. Sau đây là một inner class trong Activity:Lấy dữ liệu từ cơ sở dữ liệu sang listview không thành công

class getclicker extends ListActivity implements Button.OnClickListener { 
    public void onClick(View v) { 

     String datevalue = date.getText().toString(); 
     String Userselectvalue = userSelection.getText().toString(); 
     cursor1 = eventsData.getContact(datevalue, Userselectvalue); 
     String[] fromColumns = { classdbOpenHelper.KEY_EVENT }; 
     int[] toViews = { R.id.event }; 
     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.events, cursor1, fromColumns, toViews, 0); 
     listView = getListView(); 
     listView.setAdapter(adapter); 

    } 

    public void onDestroy() { 
     eventsData.close(); 
    } 
} 

lớp sqlite chứa

public Cursor getContact(String datevalue, String Userselectvalue) { 
    String selection = classdbOpenHelper.KEY_DESC + " = '" + Userselectvalue + "'" + " AND " + classdbOpenHelper.KEY_DATE + " = '" + datevalue + "'"; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.query(classdbOpenHelper.DATABASE_TABLE, new String[] { classdbOpenHelper.KEY_ROWID, classdbOpenHelper.KEY_DESC, classdbOpenHelper.KEY_EVENT, classdbOpenHelper.KEY_DATE }, 
      selection, null, null, null, null); 
    if (cursor != null) { 
     cursor.moveToFirst(); 
    } 
    return cursor; 
} 
+4

Tôi sẽ cung cấp 1k điểm cho người có thể khắc phục vấn đề này bằng cách chỉ tính đến thông tin trên. – gunar

+2

@gunar chalenge được chấp nhận –

+0

và loại lỗi, vui lòng? – Sajmon

Trả lời

0

theo Mã của tôi

Viết sau vào layout/main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
</LinearLayout> 

Viết sau vào DBHelper.java:

package com.example.ListViewFromSQLiteDB; 

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

public class DBHelper extends SQLiteOpenHelper{ 

    public SQLiteDatabase DB; 
    public String DBPath; 
    public static String DBName = "sample"; 
    public static final int version = '1'; 
    public static Context currentContext; 
    public static String tableName = "Resource"; 


    public DBHelper(Context context) { 
     super(context, DBName, null, version); 
     currentContext = context; 
     DBPath = "/data/data/" + context.getPackageName() + "/databases"; 
     createDatabase(); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

    } 

    private void createDatabase() { 
     boolean dbExists = checkDbExists(); 

     if (dbExists) { 
      // do nothing 
     } else { 
      DB = currentContext.openOrCreateDatabase(DBName, 0, null); 
      DB.execSQL("CREATE TABLE IF NOT EXISTS " + 
        tableName + 
        " (LastName VARCHAR, FirstName VARCHAR," + 
        " Country VARCHAR, Age INT(3));"); 

      DB.execSQL("INSERT INTO " + 
        tableName + 
        " Values ('M','shumi','India',25);"); 
      DB.execSQL("INSERT INTO " + 
        tableName + 
        " Values ('C','sarah','India',25);"); 
      DB.execSQL("INSERT INTO " + 
        tableName + 
        " Values ('D','Lavya','USA',20);"); 
      DB.execSQL("INSERT INTO " + 
        tableName + 
        " Values ('V','Avi','EU',25);"); 
      DB.execSQL("INSERT INTO " + 
        tableName + 
        " Values ('T','Shenoi','Bangla',25);"); 
      DB.execSQL("INSERT INTO " + 
        tableName + 
        " Values ('L','Lamha','Australia',20);"); 
     } 


    } 

    private boolean checkDbExists() { 
     SQLiteDatabase checkDB = null; 

     try { 
      String myPath = DBPath + DBName; 
      checkDB = SQLiteDatabase.openDatabase(myPath, null, 
        SQLiteDatabase.OPEN_READONLY); 

     } catch (SQLiteException e) { 

      // database does't exist yet. 

     } 

     if (checkDB != null) { 

      checkDB.close(); 

     } 

     return checkDB != null ? true : false; 
    } 
} 

Viết sau vào file manifest của bạn: Mã

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.ListViewFromSQLiteDB" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name="com.example.ListViewFromSQLiteDB.DataListView" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

tập tin ListViewFromSQLiteDB.java và viết sau đó:

package com.example.ListViewFromSQLiteDB; 

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class DataListView extends ListActivity { 

    private ArrayList<String> results = new ArrayList<String>(); 
    private String tableName = DBHelper.tableName; 
    private SQLiteDatabase newDB; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     openAndQueryDatabase(); 

     displayResultList(); 


    } 
    private void displayResultList() { 
     TextView tView = new TextView(this); 
     tView.setText("This data is retrieved from the database and only 4 " + 
       "of the results are displayed"); 
     getListView().addHeaderView(tView); 

     setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, results)); 
     getListView().setTextFilterEnabled(true); 

    } 
    private void openAndQueryDatabase() { 
     try { 
      DBHelper dbHelper = new DBHelper(this.getApplicationContext()); 
      newDB = dbHelper.getWritableDatabase(); 
      Cursor c = newDB.rawQuery("SELECT FirstName, Age FROM " + 
        tableName + 
        " where Age > 10 LIMIT 4", null); 

      if (c != null) { 
       if (c.moveToFirst()) { 
        do { 
         String firstName = c.getString(c.getColumnIndex("FirstName")); 
         int age = c.getInt(c.getColumnIndex("Age")); 
         results.add("Name: " + firstName + ",Age: " + age); 
        }while (c.moveToNext()); 
       } 
      }   
     } catch (SQLiteException se) { 
      Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
     } finally { 
      if (newDB != null) 
       newDB.execSQL("DELETE FROM " + tableName); 
       newDB.close(); 
     } 

    } 

} 

Bây giờ chỉ cần chạy mã ....

0

Bạn có đang nhận dữ liệu trong con trỏ không?

hãy kiểm tra sự thay đổi này dòng này và cố gắng Chuỗi lựa chọn = classdbOpenHelper.KEY_DESC + "= '+ Userselectvalue + "'" + "AND" + classdbOpenHelper.KEY_DATE +" = '+ datevalue + "'";

Các vấn đề liên quan