2017-02-15 155 views
0

我已將此代碼應用到我的應用程序中,以允許保存一個名稱,然後在ListView中顯示該名稱。我想我已將名稱添加到數據庫中,但它顯示空白ListView如何在列表視圖中列出SQlite數據庫

SQLDbHelper

public class SqlDbHelper extends SQLiteOpenHelper 
{ 
    public static final String DATABASE_TABLE = "PHONE_CONTACTS"; 


    public static final String COLUMN1 = "name"; 

    private static final String SCRIPT_CREATE_DATABASE = "create table " 
      + DATABASE_TABLE + " (" + COLUMN1 
      + " text not null);"; 

    public SqlDbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, 
         int version) { 
     super(context, name, factory, version); 
     // TODO Auto-generated constructor stub 

    } 

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

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 
    } 

} 

SqlHandler

public class SqlHandler 
{ 
    public static final String DATABASE_NAME = "MY_DATABASE"; 
    public static final int DATABASE_VERSION = 1; 
    Context context; 
    SQLiteDatabase sqlDatabase; 
    SqlDbHelper dbHelper; 

    public SqlHandler(Context context) { 

     dbHelper = new SqlDbHelper(context, DATABASE_NAME, null, 
       DATABASE_VERSION); 
     sqlDatabase = dbHelper.getWritableDatabase(); 
    } 

    public void executeQuery(String query) { 
     try { 

      if (sqlDatabase.isOpen()) { 
       sqlDatabase.close(); 
      } 

      sqlDatabase = dbHelper.getWritableDatabase(); 
      sqlDatabase.execSQL(query); 

     } catch (Exception e) { 

      System.out.println("DATABASE ERROR " + e); 
     } 

    } 

    public Cursor selectQuery(String query) { 
     Cursor c1 = null; 
     try { 

      if (sqlDatabase.isOpen()) { 
       sqlDatabase.close(); 

      } 
      sqlDatabase = dbHelper.getWritableDatabase(); 
      c1 = sqlDatabase.rawQuery(query, null); 

     } catch (Exception e) { 

      System.out.println("DATABASE ERROR " + e); 

     } 
     return c1; 

    } 

} 

List適配器:

public class PlantListAdapter extends BaseAdapter 
{ 

    Context context; 
    ArrayList<PlantListitems> contactList; 

    public PlantListAdapter(Context context, ArrayList<PlantListitems> list) { 

     this.context = context; 
     contactList = list; 
    } 

    @Override 
    public int getCount() { 

     return contactList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 

     return contactList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 

     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup arg2) { 
     PlantListitems contactListItems = contactList.get(position); 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.plant_list_row, null); 

     } 

     TextView tvName = (TextView) convertView.findViewById(R.id.tv_name); 
     tvName.setText(contactListItems.getName()); 


     return convertView; 
    } 

} 

ListView活動顯示數據庫:

SqlHandler sqlHandler; 
//private ArrayList<String> addArray; 
//public static final String PREFS = "examplePrefs"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mygarden_list); 
    listView = (ListView) findViewById(R.id.mygardenlist); 

    sqlHandler = new SqlHandler(this); 

    //addArray = new ArrayList<>(); 

    ArrayList<PlantListitems> contactList = new ArrayList<>(); 
    //contactList.clear(); 
    String query = "SELECT * FROM PHONE_CONTACTS "; 
    Cursor c1 = sqlHandler.selectQuery(query); 
    if (c1 != null && c1.getCount() != 0) { 
     if (c1.moveToFirst()) { 
      do { 
       PlantListitems plantListItems = new PlantListitems(); 


       plantListItems.setName(c1.getString(c1 
         .getColumnIndex("name"))); 


      } while (c1.moveToNext()); 
     } 
    } 
    c1.close(); 

    PlantListAdapter plantListAdapter = new PlantListAdapter(mygardenMain.this, contactList); 
    listView.setAdapter(plantListAdapter); 

} 
+1

請編輯您的代碼以將其降低到您的問題的[mcve]。您當前的代碼包含很多與您的問題相關的代碼 - 通常,最小樣本看起來與單元測試相似:只執行一項任務,輸入值指定爲可重現性。 –

回答

0

contactList是空的。

do { 
      PlantListitems plantListItems = new PlantListitems(); 


      plantListItems.setName(c1.getString(c1 
        .getColumnIndex("name"))); 

      //Add the plantListItem object to the ContactList arrayList. 
      contactList.add(plantList); 




     } while (c1.moveToNext()); 
+0

這個很有用,非常感謝。你知道一種將單個條目刪除到數據庫的方法嗎?例如在該列表視圖中顯示的單個條目 – user4682589

+0

試試這個DELETE FROM table_name WHERE [condition];你也可以參考這個https://www.tutorialspoint.com/sqlite/sqlite_delete_query.htm –

+0

謝謝,條件是該「名稱」文本框內的當前數據? – user4682589

相關問題