2013-08-06 25 views
7

Mój program zawiera Activityclass i bazę danych class. Kod użyty do zapisania wartości bazy danych do ListView ma pewne problemy. Poniżej przedstawiono inner class w Activity:Nie udało się pobrać danych z bazy danych do listy.

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

klasa sqlite zawiera

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

Chciałbym dać 1k punktów dla tego, który może naprawić ten problem, biorąc pod uwagę tylko powyższe informacje. – gunar

+2

@gunar chalenge przyjął –

+0

i rodzaj błędu, proszę? – Sajmon

Odpowiedz

0

Postępuj mój kod

Zapis w następujący układ/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> 

Napisz następujące do 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; 
    } 
} 

zapis następujący do swojego pliku manifestu:

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

plików ListViewFromSQLiteDB.java i napisać następujący kod tam:

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

    } 

} 

Teraz wystarczy uruchomić kod ....

0

Czy otrzymujesz dane kursorem?

Proszę zaznaczyć to zmienić tę linię i spróbuj wybór String = classdbOpenHelper.KEY_DESC + "= '" + Userselectvalue + "'" + "i" + classdbOpenHelper.KEY_DATE + "= '" + DATEVALUE + "'";

Powiązane problemy