2016-02-09 2 views
1

У меня есть SQLite db с 2 элементами. Я могу получить первую строку, используя HashMap и сохранить ее в Строках, чтобы показать значения. Но я хочу получить все строки и передать их как параметры в Volley POST Stringrequest. Чтобы проверить вывод полученного результата, я добавляю значения String в textview, но textview показывает только строку forst. Итак, как получить все строки?Извлечь все строки из SQLite и передать параметры POST

Activity: 
 

 
public class NewActivity extends Activity{ 
 
\t 
 
\t TextView name, mobile; 
 
\t private SQLiteHandler db; 
 
\t 
 
\t @Override 
 
\t protected void onCreate(Bundle savedInstanceState) { 
 
\t \t // TODO Auto-generated method stub 
 
\t \t super.onCreate(savedInstanceState); 
 
\t \t setContentView(R.layout.newactivity); 
 
\t \t 
 
\t \t name = (TextView)findViewById(R.id.name); 
 
\t \t mobile = (TextView)findViewById(R.id.mobile); 
 
\t \t db = new SQLiteHandler(getApplicationContext()); 
 
\t } 
 
\t 
 
\t public void show(View v){ //on button click 
 
\t \t 
 
\t \t HashMap<String, String> pro = db.getProfDetails(); 
 
\t \t for(int i=0; i<pro.size();i++){ 
 
\t \t \t String proName = pro.get("name"); 
 
\t \t \t String proMobile = pro.get("mobile"); 
 
\t \t \t name.setText(proName); 
 
\t \t \t mobile.setText(proMobile); 
 
\t \t \t 
 
\t \t } 
 
\t \t 
 
\t } 
 

 
}
public class SQLiteHandler extends SQLiteOpenHelper { 
 

 
\t private static final String TAG = SQLiteHandler.class.getSimpleName(); 
 

 
\t // All Static variables 
 
\t // Database Version 
 
\t private static final int DATABASE_VERSION = 1; 
 

 
\t // Database Name 
 
\t private static final String DATABASE_NAME = "android_api"; 
 

 
\t // Profile Settings table name 
 
\t private static final String TABLE_PROF = "prof"; 
 

 
\t // Profile Settings information names 
 
\t private static final String KEY_ID = "id"; 
 
\t private static final String KEY_NAME = "name"; 
 
\t private static final String KEY_MOBILE = "mobile"; 
 

 

 
\t public SQLiteHandler(Context context) { 
 
\t \t super(context, DATABASE_NAME, null, DATABASE_VERSION); 
 
\t } 
 

 
\t // Creating Tables 
 
\t @Override 
 
\t public void onCreate(SQLiteDatabase db) { 
 

 
\t \t String CREATE_PROF_TABLE = "CREATE TABLE " + TABLE_PROF + "("+KEY_ID+" INTEGER PRIMARY KEY, "+KEY_NAME+" TEXT, "+KEY_MOBILE+" TEXT" + ")"; 
 

 
\t \t db.execSQL(CREATE_PROF_TABLE); 
 

 
\t \t Log.d(TAG, "Database tables created"); 
 
\t } 
 

 
\t // Upgrading database 
 
\t @Override 
 
\t public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
 
\t \t // Drop older table if existed 
 
\t \t db.execSQL("DROP TABLE IF EXISTS " + TABLE_PROF); 
 

 
\t \t // Create tables again 
 
\t \t onCreate(db); 
 
\t } 
 

 

 
\t /** 
 
\t * Storing Prof_settings details in database 
 
\t * */ 
 
\t public void addProfile(String name, String mobile){ 
 

 
\t \t SQLiteDatabase db = this.getWritableDatabase(); 
 

 
\t \t ContentValues values = new ContentValues(); 
 

 
\t \t values.put(KEY_NAME, name); 
 
\t \t values.put(KEY_MOBILE, mobile); 
 

 
\t \t // Inserting Row 
 
\t \t //long id = db.update(TABLE_PROF, values, KEY_ID, null); //for update 
 
\t \t //db.execSQL("delete from "+ TABLE_PROF); //clears 1st row 
 
\t \t long id = db.insert(TABLE_PROF, null, values); // insert to 1st row 
 
\t \t db.close(); // Closing database connection 
 

 
\t \t Log.d(TAG, "New profile settings inserted into sqlite: " + id); 
 

 
\t } 
 

 

 

 

 
\t /** 
 
\t * Getting Profile Settings data from database 
 
\t * */ 
 
\t public HashMap<String, String> getProfDetails() { 
 
\t \t HashMap<String, String> pro = new HashMap<String, String>(); 
 
\t \t String selectQuery = "SELECT * FROM " + TABLE_PROF; 
 

 
\t \t SQLiteDatabase db = this.getReadableDatabase(); 
 
\t \t Cursor cursor = db.rawQuery(selectQuery, null); 
 
\t \t // Move to first row 
 
\t \t cursor.moveToFirst(); 
 
\t \t if (cursor.getCount() > 0) { 
 
\t \t \t pro.put("name", cursor.getString(1)); 
 
\t \t \t pro.put("mobile", cursor.getString(2)); 
 
\t \t } 
 
\t \t cursor.close(); 
 
\t \t db.close(); 
 
\t \t // return log details 
 
\t \t Log.d(TAG, "Fetching profile details from Sqlite: " + pro.toString()); 
 

 
\t \t return pro; 
 
\t } 
 

 
\t /** 
 
\t * Re crate database Delete all tables and create them again 
 
\t * */ 
 
\t public void deleteUsers() { 
 
\t \t SQLiteDatabase db = this.getWritableDatabase(); 
 
\t \t // Delete All Rows 
 
\t \t db.delete(TABLE_PROF, null, null); 
 
\t \t db.close(); 
 

 
\t \t Log.d(TAG, "Deleted all profile info from sqlite"); 
 
\t } 
 

 
}

+0

Показать Volley код, связанный с которой и попытались –

+0

Здесь может быть getProfDetails() есть проблема, поскольку вы пытаетесь переписать последнее значение в HashMap, пожалуйста, проверьте, что метод db отлаживает firdst. –

+0

Я пытаюсь проверить, вставляются ли значения. Чтобы проверить это, я извлекаю значения и устанавливаю их как textview. – Sam

ответ

0

Вот метод DB, чтобы получить все записи из таблицы:

public ArrayList<HashMap<String, String>> getProfDetails() 
    { 
     ArrayList<HashMap<String, String>> array_list = new ArrayList<HashMap<String, String>>(); 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("SELECT * " + " FROM " + PROFILE_TABLE_NAME + " GROUP BY " + PRFOILE_COLUMN_USERNAME + " ORDER BY " + PRFOILE_COLUMN_USERNAME + " COLLATE NOCASE;", null); 
     res.moveToFirst(); 

     while (res.isAfterLast() == false) 
     { 
      hashmap = new HashMap<String, String>(); 
      hashmap.put("name", res.getString(res.getColumnIndex(PROFILE_COLUMN_USERNAME))); 
      hashmap.put("mobile", res.getString(res.getColumnIndex(PROFILE_COLUMN_MOBILENUMBER))); 

      array_list.add(hashmap); 
      res.moveToNext(); 
     } 
     return array_list; 
    } 

Вы можете получить ответ, как показано ниже:

ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String, String>>(); 
arrayList = databaseHandler.getProfDetails(); 

if (arrayList.size() != 0) 
      { 
       for (int i = 0; i < arrayList.size(); i++) 
       { 
       profilenameList.add(arrayList.get(i).get("name"));  
       profilemobilenumberlist.add(arrayList.get(i).get("mobile")); 

       } 
      } 

Надежда это Вам поможет.

+0

Спасибо за код. Я получаю значения, но с небольшой проблемой. – Sam

+0

Я использовал этот код для получения информации http://www.hastebin.com/idiwofewob.coffee – Sam

+0

@Sam: какая проблема? – KishuDroid

0

Пожалуйста, проверьте небольшое изменение ниже код будет работать:

public ArrayList<HashMap<String, String>> getProfDetails() 
{ 
    ArrayList<HashMap<String, String>> array_list = new ArrayList<HashMap<String, String>>(); 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_PROF, null); 

if(cursor!=null) 
{ 
    if (cursor.moveToFirst()) { 
     do { 
      hashmap = new HashMap<String, String>(); 
      hashmap.put("name", res.getString(res.getColumnIndex(KEY_NAME))); 
      hashmap.put("mobile", res.getString(res.getColumnIndex(KEY_MOBILE))); 

      array_list.add(hashmap); 

     } while (cursor.moveToNext()); 
    } 

} 
    return array_list; 
} 

Вы можете получить профиль детали приведены ниже:

ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String, String>>(); 
arrayList = databaseHandler.getProfDetails(); 

if(arrayList !=null && arrayList.size()>0){ 
{ 
    //extract the name and mobile number from arrayList 

}