Android:从 Hashmap Arraylist 中获取单个值? [英] Android: Get single value from Hashmap Arraylist?

查看:68
本文介绍了Android:从 Hashmap Arraylist 中获取单个值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以基本上,我有一个使用哈希映射的数据库.运行查询后,我想输出 ID 并将其存储在另一个活动的数组中.之后,我想访问数组中的单个元素.

So basically, I have a database that uses Hashmapping. After I run a query, I'd like to output the ID's and store it in an array in another activity. After that, I'd like to access a single element from the array.

这是我的数据库代码

public ArrayList<HashMap<String, String>> getIDList() {
    ArrayList<HashMap<String, String>> IDList = new ArrayList<HashMap<String, String>>();
    String selectQuery = "SELECT cardID FROM flashcards";
    SQLiteDatabase database = this.getWritableDatabase();

    Cursor cursor = database.rawQuery(selectQuery, null);
    if(cursor.moveToFirst()) {
        do { HashMap<String, String> cardMap = new HashMap<String, String>();
        cardMap.put("cardID", cursor.getString(0));
        IDList.add(cardMap);

        } while(cursor.moveToNext());
    }
    return IDList;

这是我试图访问元素的代码.在这种情况下,我想访问第一个元素.但是一个错误

This is the code where I am trying to access the elements. In this case, I'd like to access the first element. But an error

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_flashcards_random);


    TextView currentID = (TextView) findViewById(R.id.currentIdText);
    ArrayList<HashMap<String, String>> IDList = dbTools.getIDList();
    currentID.setText((IDList.get(0)).toString());



}

有什么建议吗?

按要求提供更多代码.

这是数据库工具代码

    package com.izulki.flipper;

import java.util.ArrayList;
import java.util.HashMap;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBTools extends SQLiteOpenHelper {


    public DBTools(Context applicationContext){
        super(applicationContext, "flashcards.db", null, 1);
    }

    String DBName = "flashcards";

    @Override
    public void onCreate(SQLiteDatabase database) {
        String query = "CREATE TABLE flashcards (cardID INTEGER PRIMARY KEY, question VARCHAR, answer VARCHAR, subject VARCHAR, answered INTEGER, correct INTEGER)";
        database.execSQL(query);

    }

    @Override 
    public void onUpgrade(SQLiteDatabase database, int oldVersiom, int newVersion) {
        String query = "DROP TABLE IF EXISTS flashcards";

        database.execSQL(query);
        onCreate(database);

    }

    public boolean checkCard(String CardID) {
        SQLiteDatabase database = this.getReadableDatabase();
        Cursor cursor = database.rawQuery("SELECT * FROM flashcards WHERE CardID = ? ", new String[]{CardID});
                boolean exists = (cursor.getCount() > 0);
        cursor.close();
        return exists;

    }

    public void insertCard(HashMap<String, String> queryValues) {

        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("question", queryValues.get("question"));
        values.put("answer", queryValues.get("answer"));
        values.put("subject", queryValues.get("subject"));
        values.put("answered", 0);
        values.put("correct", 0);

        database.insert("flashcards", null, values);
        database.close();

    }



    public int getCardsCount() {
        String countQuery = "SELECT * FROM flashcards";
        SQLiteDatabase flashcards = this.getReadableDatabase();
        Cursor cursor = flashcards.rawQuery(countQuery, null);
        int cnt = cursor.getCount();
        cursor.close();
        return cnt;
    }






    public int updateCard(HashMap<String, String> queryValues) {
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("question", queryValues.get("question"));
        values.put("answer", queryValues.get("answer"));
        values.put("subject", queryValues.get("subject"));


        return database.update("flashcards", values, 
                "cardID" + " =?", new String[] {queryValues.get("cardID")});
    }

    public void resetCardStatistics(int cardID) {
        SQLiteDatabase database = this.getWritableDatabase();
        String resetQuery = "UPDATE flashcards SET answered = 0, correct = 0 WHERE CardID ='" + cardID + "'";
        database.execSQL(resetQuery);
    }


    public void deleteAllCards() {
        SQLiteDatabase database = this.getWritableDatabase();
        String deleteQuery = "Delete FROM flashcards";
        database.execSQL(deleteQuery);

    }

    public void deleteCard(int cardID) {
        SQLiteDatabase database = this.getWritableDatabase();
        String deleteQuery = "DELETE FROM flashcards WHERE CardID ='" + cardID + "'";
        database.execSQL(deleteQuery);

    }



    public ArrayList<HashMap<String, String>> getAllCards(){
        ArrayList<HashMap<String, String>> cardArrayList = new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT * FROM flashcards ORDER BY subject";
        SQLiteDatabase database = this.getWritableDatabase();

        Cursor cursor = database.rawQuery(selectQuery, null);
        if(cursor.moveToFirst()){
            do{
                HashMap<String, String> cardMap = new HashMap<String, String>();
                cardMap.put("cardID", cursor.getString(0));
                cardMap.put("question", cursor.getString(1));
                cardMap.put("answer", cursor.getString(2));
                cardMap.put("subject", cursor.getString(3));

            cardArrayList.add(cardMap);
            } while(cursor.moveToNext());
        }
        return cardArrayList;
    }

    public ArrayList<HashMap<String, String>> getCardsSubject(String subjectSearch) {
        ArrayList<HashMap<String, String>> subjectList = new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT cardID FROM flashcards WHERE subject = '" + subjectSearch + "'";
        SQLiteDatabase database = this.getWritableDatabase();

        Cursor cursor = database.rawQuery(selectQuery, null);
        if(cursor.moveToFirst()) {
            do { HashMap<String, String> cardMap = new HashMap<String, String>();
            cardMap.put("cardID", cursor.getString(0));
            subjectList.add(cardMap);

            } while(cursor.moveToNext());
        }
        return subjectList;

    }

    public ArrayList<HashMap<String, String>> getIDList() {
        ArrayList<HashMap<String, String>> IDList = new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT cardID FROM flashcards";
        SQLiteDatabase database = this.getWritableDatabase();

        Cursor cursor = database.rawQuery(selectQuery, null);
        if(cursor.moveToFirst()) {
            do { HashMap<String, String> cardMap = new HashMap<String, String>();
            cardMap.put("cardID", cursor.getString(0));
            IDList.add(cardMap);

            } while(cursor.moveToNext());
        }
        return IDList;

    }

    public HashMap<String, String> getQuestionFromID(int randomID) {
    HashMap<String, String> questionFinal = new HashMap<String, String>();
    SQLiteDatabase database = this.getReadableDatabase();
    String selectQuery = "SELECT question FROM flashcards WHERE cardID ='" + randomID + "'";
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do{
        questionFinal.put("question", cursor.getString(0));
    } while (cursor.moveToNext());
    }
     return questionFinal;
    }

    public HashMap<String, String> getAnswerFromID(int randomID) {
        HashMap<String, String> answerFinal = new HashMap<String, String>();
        SQLiteDatabase database = this.getReadableDatabase();
        String selectQuery = "SELECT answer FROM flashcards WHERE cardID ='" + randomID + "'";
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do{
            answerFinal.put("answer", cursor.getString(0));
        } while (cursor.moveToNext());
        }
         return answerFinal;
        }

    public void incrementCorrect(int ID){
        SQLiteDatabase database = this.getWritableDatabase();
        String incrementQuery = "UPDATE flashcards SET correct = correct +1 WHERE CardID = '" + ID + "'" ;
        database.execSQL(incrementQuery);
    }

    public void incrementAnswered(int randomID) {
        SQLiteDatabase database = this.getWritableDatabase();
        String incrementQuery = "UPDATE flashcards SET answered = answered +1 WHERE CardID = '" + randomID + "'" ;
        database.execSQL(incrementQuery);
    }

    public HashMap<String, String> getCardInfo(int randomID){
    HashMap<String, String> cardMap = new HashMap<String, String>();
    SQLiteDatabase database = this.getReadableDatabase();
    String selectQuery = "SELECT * FROM flashcards WHERE cardID ='" + randomID + "'";

    Cursor cursor = database.rawQuery(selectQuery, null);
    if(cursor.moveToFirst()){
        do{

            cardMap.put("cardID", cursor.getString(0));
            cardMap.put("question", cursor.getString(1));
            cardMap.put("answer", cursor.getString(2));
            cardMap.put("subject", cursor.getString(3));
            cardMap.put("answered", cursor.getString(4));
            cardMap.put("correct", cursor.getString(5));

        } while(cursor.moveToNext());
    }
        return cardMap;

    }
}

这是活动代码

    package com.izulki.flipper;

import java.util.ArrayList;
import java.util.HashMap;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;

public class FlashcardsAnswer extends Activity {

    DBTools dbTools = new DBTools(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_flashcards_random);


        TextView currentID = (TextView) findViewById(R.id.currentIdText);
        ArrayList<HashMap<String, String>> IDList = dbTools.getIDList();
        currentID.setText((IDList.get(0)).toString());



    }





    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.flashcards_answer, menu);
        return true;
    }

}

这是错误

    02-21 15:02:55.777: E/AndroidRuntime(1827): FATAL EXCEPTION: main
02-21 15:02:55.777: E/AndroidRuntime(1827): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.IllegalStateException: Unable to get package info for com.izulki.flipper; is package not installed?
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.app.LoadedApk.makeApplication(LoadedApk.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.app.ActivityThread.access$1300(ActivityThread.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.os.Handler.dispatchMessage(Handler.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.os.Looper.loop(Looper.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.app.ActivityThread.main(ActivityThread.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at java.lang.reflect.Method.invokeNative(Native Method)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at java.lang.reflect.Method.invoke(Method.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at dalvik.system.NativeStart.main(Native Method)
02-21 15:02:55.777: E/AndroidRuntime(1827): Caused by: java.lang.IllegalStateException: Unable to get package info for com.izulki.flipper; is package not installed?
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     at android.app.LoadedApk.getClassLoader(LoadedApk.java)
02-21 15:02:55.777: E/AndroidRuntime(1827):     ... 12 more

推荐答案

试试这个:

for (HashMap<String, String> map : IDList)
     for (Entry<String, String> mapEntry : map.entrySet())
        {
        String key = mapEntry.getKey();
        String value = mapEntry.getValue();
        }

对于单个元素:IDList.get(0).get(key);

这篇关于Android:从 Hashmap Arraylist 中获取单个值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆