2013-08-06 78 views
7

我的程序包含一個Activityclass和一個數據庫class。我用來將數據庫值保存到ListView的代碼有一些問題。 以下是在inner classActivity從數據庫檢索數據到列表視圖失敗

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(); 
    } 
} 

源碼類包含

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

我會給1k點的人可以解決這個問題,只考慮以上信息。 – gunar

+2

@ gunar chalenge接受 –

+0

和那種錯誤請嗎? – Sajmon

回答

0

按照我的代碼

寫入以下內容佈局/ 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> 

將以下內容寫入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; 
    } 
} 

寫入以下到您的清單文件:

<?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> 

ListViewFromSQLiteDB.java文件,並寫入下面的代碼有:

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(); 
     } 

    } 

} 

現在只需運行代碼....

0

你在光標中獲取數據嗎?

請這種變化這條線,並嘗試 字符串選擇= classdbOpenHelper.KEY_DESC + 「= '」 + Userselectvalue + 「'」 + 「和」 + classdbOpenHelper.KEY_DATE + 「= '」 + DATEVALUE + 「'」;

相關問題