【问题标题】:Put the data from sqlite into hashmap in list form将 sqlite 中的数据以列表形式放入 hashmap
【发布时间】:2012-08-15 15:30:32
【问题描述】:
public class ABC extends ListActivity {
static final ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.abc_list);

    SimpleAdapter adapter = new SimpleAdapter(
            this,
            list,
            R.layout.abc_list_row,
            new String[] {"AAA","BBB","CCC"},
            new int[] {R.id.aa,R.id.bb, R.id.cc,}
            );

    add();
    setListAdapter(adapter);  
}

   private void add() {        

    DatabaseA databaseHelper = new DatabaseA(this);
    SQLiteDatabase db = databaseHelper.getReadableDatabase();

    Cursor c= db.rawQuery("select * from data", null);
    HashMap<String,String> temp = new HashMap<String,String>();  

    while(c.moveToNext()){
        Log.d("Debug", c.getString(2));
        temp.put("AAA", c.getString(1));
        temp.put("BBB", c.getString(2));
        temp.put("CCC", c.getString(3));
        list.add(temp);
    } 

    c.close();
    db.close();

    for (Map.Entry<String, String> entry : temp.entrySet()) {
        String xx= entry.getKey();
        String yy = entry.getValue();
        Log.d("data", xx+" : "+yy);
    }
}

我的 Logcat:

 D/Debug(657): New york
 D/Debug(657): New moon
 D/data(657): AAA : Aug 20, 2012 3:57:02 PM
 D/data(657): BBB : New moon
 D/data(657): CCC : Title

我的问题是它总是忽略此列表中 sqlite 的第一个数据。此外,每次我按下按钮查看此列表时,它都会将这些数据添加到此列表中,尽管它们已经存在。我只想以列表形式在 sqlite 中查看这些数据。有什么办法可以解决这个问题。谢谢。

【问题讨论】:

    标签: android sqlite list hashmap


    【解决方案1】:

    您需要在 while 循环中创建您的 Map

    while(c.moveToNext()){
        Map<String,String> temp = new HashMap<String,String>();  
        Log.d("Debug", c.getString(2));
        temp.put("AAA", c.getString(1));
        temp.put("BBB", c.getString(2));
        temp.put("CCC", c.getString(3));
        list.add(temp);
    } 
    

    【讨论】:

      【解决方案2】:

      像这样添加光标 moveToFirst():

      Cursor c= db.rawQuery("select * from data", null);
      HashMap<String,String> temp = new HashMap<String,String>();  
      c.moveToFirst();
      while(c.moveToNext()){
          Log.d("Debug", c.getString(2));
          temp.put("AAA", c.getString(1));
          temp.put("BBB", c.getString(2));
          temp.put("CCC", c.getString(3));
          list.add(temp);
      } 
      

      请在点击按钮时发布源代码!

      【讨论】:

      • 无需添加 moveToFirst(),moveToNext() 会自动为您完成。
      • public void viewList (View botton) { Intent intent = new Intent(); intent.setClass(this,ABC.class); startActivity(intent); }
      • 任何时候启动 ABC 活动,您都会调用 add() 方法。在 add() 方法中,它会加起来,因为您已将列表定义为静态。如果你松开静电,我认为它不会加起来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2021-04-13
      • 1970-01-01
      相关资源
      最近更新 更多