2015-01-30 3 views
0

Я новичок в Android. Я пользуюсь списком загруженных Федором альбомов. Можно ли получить все значения из HashMap (значения были извлечены из баз данных) и сохранить его в частных String [] drinkImages?Android - Получите ценность от HashMap и сохраните до частного String [] drinkImages

String [] drinkImages 'значения будут переданы адаптер Lazy_Adapter.

Или есть ли другой способ передать значение Lazy_Adapter?

Код:

Lazy_ListItem.java

public class Lazy_ListItem extends Activity { 

ListView list; 
Lazy_Adapter adapter; 

// Progress Dialog 
private ProgressDialog pDialog; 

// Creating JSON Parser object 
JSONParser jParser = new JSONParser(); 

ArrayList<HashMap<String, String>> drinksList; 

// url to get all products list 
private static String url_all_drinks = "http://10.0.2.2/restosnapp/get_all_products.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_DRINKS = "drinks"; 
private static final String TAG_RID = "rid"; 
private static final String TAG_DRK_ID = "drk_id"; 
private static final String TAG_DRK_NAME = "drk_name"; 
private static final String TAG_DRK_DESC = "drk_desc"; 
private static final String TAG_DRK_PRICE = "drk_price"; 
private static final String TAG_DRK_AVAIL = "drk_avail"; 
private static final String TAG_DRK_IMAGE = "drk_image"; 

// products JSONArray 
JSONArray drinks = null; 

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

    list = (ListView) findViewById(R.id.list); 
    adapter = new Lazy_Adapter(this, drinkImages); 
    list.setAdapter(adapter); 

    // Button b = (Button) findViewById(R.id.button1); 
    // b.setOnClickListener(listener); 

} 

@Override 
public void onDestroy() { 
    list.setAdapter(null); 
    super.onDestroy(); 
} 

/* 
* public OnClickListener listener = new OnClickListener() { 
* 
* @Override public void onClick(View arg0) { 
* adapter.imageLoader.clearCache(); adapter.notifyDataSetChanged(); } }; 
*/ 

/** 
* Background Async Task to Load all product by making HTTP Request 
* */ 
class LoadAllProducts extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    /* 
    * @Override protected void onPreExecute() { super.onPreExecute(); 
    * 
    * pDialog = new ProgressDialog(Lazy_Adapter.this, Lazy_ListItem.class); 
    * pDialog.setMessage("Loading drinks. Please wait..."); 
    * pDialog.setIndeterminate(false); pDialog.setCancelable(false); 
    * pDialog.show(); 
    * 
    * //final ProgressDialog dialog; // dialog = 
    * ProgressDialog.show(getActivity, "Title", "Message", true); } 
    */ 

    /** 
    * getting All products from url 
    * */ 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_all_drinks, "GET", 
       params); 

     // Check your log cat for JSON response 
     Log.d("All Drinks: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // products found 
       // Getting Array of Products 
       drinks = json.getJSONArray(TAG_DRINKS); 

       // looping through All Products 
       for (int i = 0; i < drinks.length(); i++) { 
        JSONObject c = drinks.getJSONObject(i); 

        // Storing each json item in variable 
        String drk_image = c.getString(TAG_DRK_IMAGE); 

        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        map.put(TAG_DRK_IMAGE, drk_image); 

        // adding HashList to ArrayList 
        drinksList.add(map); 

       } 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 

/** 
* After completing background task Dismiss the progress dialog 
* **/ 
protected void onPostExecute(String file_url) { 
    // dismiss the dialog after getting all products 
    pDialog.dismiss(); 

} 

private String[] drinkImages = { 
     "http://webitprojects.com/restaurant/images/drinks/drk_coffee.jpg", 
     "http://webitprojects.com/restaurant/images/drinks/drk_calamansijuice.jpg", 
     "http://webitprojects.com/restaurant/images/drinks/drk_blackgulaman.jpg", 
     "http://webitprojects.com/restaurant/images/drinks/drk_avocadoshake.jpg", 
     "http://webitprojects.com/restaurant/images/drinks/drk_durianshake.jpg" }; } 

Lazy_Adapter.java

public class Lazy_Adapter extends BaseAdapter { 

String drk_name, drk_desc, drk_price, drk_avail; 

// Progress Dialog 
private ProgressDialog pDialog; 

// Creating JSON Parser object 
JSONParser jParser = new JSONParser(); 

ArrayList<HashMap<String, String>> drinksList; 

// url to get all products list 
private static String url_all_drinks = "http://10.0.2.2/restosnapp/get_all_products.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_DRINKS = "drinks"; 
private static final String TAG_RID = "rid"; 
private static final String TAG_DRK_ID = "drk_id"; 
private static final String TAG_DRK_NAME = "drk_name"; 
private static final String TAG_DRK_DESC = "drk_desc"; 
private static final String TAG_DRK_PRICE = "drk_price"; 
private static final String TAG_DRK_AVAIL = "drk_avail"; 
private static final String TAG_DRK_IMAGE = "drk_image"; 

// products JSONArray 
JSONArray drinks = null; 

private Activity activity; 
private String[] data; 
private static LayoutInflater inflater = null; 
public Lazy_ImageLoader imageLoader; 

public Lazy_Adapter(Activity a, String[] d) { 
    activity = a; 
    data = d; 
    inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader = new Lazy_ImageLoader(activity.getApplicationContext()); 

    // Hashmap for ListView 
    drinksList = new ArrayList<HashMap<String, String>>(); 

    // Loading products in Background Thread 
    new LoadAllProducts().execute(); 
} 

public int getCount() { 
    return data.length; 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

// /// 

/** 
* Background Async Task to Load all product by making HTTP Request 
* */ 
class LoadAllProducts extends AsyncTask<String, String, String> { 

    /** 
    * getting All products from url 
    * */ 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_all_drinks, "GET", 
       params); 

     // Check your log cat for JSON response 
     Log.d("All Drinks: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // products found 
       // Getting Array of Products 
       drinks = json.getJSONArray(TAG_DRINKS); 

       // looping through All Products 
       for (int i = 0; i < drinks.length(); i++) { 
        JSONObject c = drinks.getJSONObject(i); 

        // Storing each json item in variable 
        drk_name = c.getString(TAG_DRK_NAME); 
        drk_desc = c.getString(TAG_DRK_DESC); 
        drk_price = c.getString(TAG_DRK_PRICE); 
        drk_avail = c.getString(TAG_DRK_AVAIL); 

        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 

        map.put(TAG_DRK_NAME, drk_name); 
        map.put(TAG_DRK_DESC, drk_desc); 
        map.put(TAG_DRK_PRICE, drk_price); 
        map.put(TAG_DRK_AVAIL, drk_avail); 

        // adding HashList to ArrayList 
        drinksList.add(map); 
       } 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

} 

@SuppressWarnings("unused") 
public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    if (convertView == null) 
     vi = inflater.inflate(R.layout.item, null); 

    for (Map<String, String> menuItem : drinksList) { 
     ImageView image = (ImageView) vi.findViewById(R.id.image); 
     imageLoader.DisplayImage(data[position], image); 
     TextView tvMenuName = (TextView) vi.findViewById(R.id.tvMenuName); 
     tvMenuName.setText(drinksList.get(position).get(TAG_DRK_NAME)); 
     TextView tvMenuDesc = (TextView) vi.findViewById(R.id.tvMenuDesc); 
     tvMenuDesc.setText(drinksList.get(position).get(TAG_DRK_DESC)); 
     TextView tvMenuPrice = (TextView) vi.findViewById(R.id.tvMenuPrice); 
     tvMenuPrice.setText("P" 
       + drinksList.get(position).get(TAG_DRK_PRICE)); 
     TextView tvMenuAvail = (TextView) vi.findViewById(R.id.tvMenuAvail); 
     tvMenuAvail.setText(drinksList.get(position).get(TAG_DRK_AVAIL)); 

    } 

    return vi; 
}} 

Я надеюсь, что вы можете мне помочь. Спасибо.

+0

map.entrySet() ToArray(); или просто map.values ​​(). toArray(); только для значений – Dhina

+0

Где именно я должен это разместить? Я поместил его под drinkList.add (карта); и сделал String [] drinkImages глобальным, но я получаю сообщение об ошибке. – serendipochi

ответ

0
String[] drinkImages = (String[]) drinkList.get(0).values().toArray(); 
+0

Я получаю сообщение об ошибке на этой строке. – serendipochi

0

Да, что-то вроде этого будет работать.

public static void main(String[] args) { 
     Map<String, String> hm = new HashMap<String, String>(); // and yes. I am still using java 6 :(
     hm.put("a", "a.jpg"); 
     hm.put("b", "b.jpg"); 
     String[] arr = new String[hm.size()]; 
     hm.values().toArray(arr); 
     for (String s : arr) { 
      System.out.println(s); 
     } 
    } 

O/P:

b.jpg 
a.jpg 
0

Вы можете получить доступ к perticular строку на loacation с этим кодом. Здесь я являюсь индекс числа, которое может быть 0,1,2 и т.д.

String yourstring = drinksList.get(i).get(TAG_DRK_IMAGE) 
+0

Да. Но это будет просто String not String []? – serendipochi

0

Попытки для итерации HashMap и построить массив из значения HashMap:.

public String[] getStringArrayFromMap(HashMap<String,String> map){ 
    String[] array = new String[map.size()]; 
    int i=0; 
    for (String key : map.keySet()) { 
     array[i++] = map.get(key); 
    } 
    return array; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^