2016-07-17 34 views
1

嗨即時通訊非常新的Android,所以我有這個功能,需要添加和檢索我的數據庫。到目前爲止,這裏是我的,所以我有這套java文件 newLoc.java包含用戶點擊保存按鈕時響應的代碼。 Area.java包含getter和setter。 DBHandler.java有數據庫的東西。 在添加區域我已經記錄它,以便我可以檢查它是否被添加或不。問題是當我讀表時。在我的newLoc.java中,即時通訊也調用getALLAREA函數來檢查記錄是否被插入,但唯一的輸出即時獲取是數據庫中的記錄的ID任何想法,我做錯了什麼? 代碼在這裏正確插入和從sqlite獲取數據android

newLoc.java

這裏是響應於當用戶點擊保存按鈕的代碼。它會從EDITTEXT數據然後調用DBHanlder添加數據

public void onClick(View v) 
    { 
     String text ="user created"; 

     Toast tempMessage = 
       Toast.makeText(newLoc.this, 
         text, 
         Toast.LENGTH_SHORT); 
     tempMessage.show(); 

     areaname = narea.getText().toString(); 
     DBHandler db = new DBHandler(newLoc.this); 
     Log.d("Insert: ", "Inserting .." + areaname); 
     db.addNArea(new Area(areaname)); 

     Log.d("Reading: " , "Reading users.."); 
     List<Area> area = db.getALLAREA(); 

     for(Area ar : area) 
     { 
      String arean = ar.getArea(); 
      Log.d("Areas" , arean); 
     } 

    } 

Area.java

這是我的getter和setter從區域

public class Area 
{ 
private int arID; 
private String narea; 

public Area() 
{ 
} 
public Area(String area) 
{ 
    this.narea = area; 
} 

public void setArea(String area) 
{ 
    this.narea = area; 
} 

public String getArea() 
{ 
    return narea; 
} 
} 

DBHandeler。 java 這是數據庫內容完成的地方。在addNArea,我已經把一個日誌裏面的嘗試來檢查數據是否被添加。日誌從用戶的打印數據,所以我認爲這是正確的插入,因爲我沒能看到該錯誤日誌

public void addNArea(Area are) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_ANAME, are.getArea()); 
    try 
    { 
     db.insert(TABLE_AREA, null, values); 
     Log.d("Insert: ", "Inserting .." + are.getArea()); 
    } 
    catch (SQLException e) 
    { 
     Log.d("error: " , "" + e); 
    } 


    db.close(); 
} 

//view areas 
public List<Area> getALLAREA() 
{ 
    List<Area> arealist = new ArrayList<Area>(); 
    String selectQuery = "SELECT * FROM " + TABLE_AREA; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Area allarea = new Area(); 
      allarea.setArea(cursor.getString(0)); 

      arealist.add(allarea); 
     } while (cursor.moveToNext()); 
    } 
    return arealist; 
} 

所以現在的問題是,在我的newLoc.java我看不到我添加的區域列表。關於我做錯什麼的想法?非常感謝!

回答

1

,則不應使用

'SELECT *' 

使用:

'SELECT KEY_ANAME' 

而這就是爲什麼: 通過創建內容價值

values.put(KEY_ANAME, are.getArea()) 

數據庫驅動程序將生成:

INSERT INTO tabname (col1) values ('my area name') 

中,美中定義

KEY_ANAME = "col1" 

情況下,也許這是什麼ü真的whanted做: 假設UR表有定義:

TArea (pk_area int pkey, area_name varchar(100)) 

比你插入應該是這樣的:

private static final String COL_NAME = "area_name"; 
    private static final String PKEY = "pk_area"; 
    private static final String TAB_AREA = "TArea"; 
    ... 
    values.put(COL_NAME, are.getArea()) 

而你的選擇喜歡:

String sql = "SELECT " + PKEY +", "+ COL_NAME + " FROM " + TAB_AREA; 
    Cusor cur = db.rawQuerry(sql, null); 
    ... 
     int id = cur.getInt(0); 
     String name = getString.get(1); 
+0

這麼厲害! :) – BourneShady