2013-08-06 6 views
7

मेरे प्रोग्राम में Activityclass और डेटाबेस class है। कोड जो मैं डेटाबेस मानों को ListView में सहेजने के लिए उपयोग करता हूं, में कुछ समस्याएं होती हैं। निम्नलिखित में एक inner class है Activity:डेटाबेस से सूची में डेटा पुनर्प्राप्त करने में विफल रहा

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

SQLite वर्ग

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

@ गुनार चैलेंज ने –

+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 +' ' ";

संबंधित मुद्दे