【问题标题】:Android - Get value from HashMap and store to private String[] drinkImagesAndroid - 从 HashMap 获取值并存储到私有 String[] DrinkImages
【发布时间】:2015-01-30 13:04:33
【问题描述】:

我是 Android 新手。我正在使用 Fedor 的延迟加载列表。是否可以从 HashMap 获取所有值(值是从 mysql 检索的)并将其存储到 private String[] DrinkImages

String[] DrinkImages' 的值将被传递给 adapter 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;
}}

我希望你能帮助我。谢谢。

【问题讨论】:

  • map.entrySet().toArray();或者只是 map.values().toArray();仅用于价值
  • 我应该把它放在哪里?我把它放在drinksList.add(map);并将 String [] DrinkImages 设为全局,但出现错误。

标签: android hashmap lazy-loading lazylist


【解决方案1】:

您可以使用此代码访问特定的字符串。这里 i 是一个索引号,可能是 0,1,2 等。

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

【讨论】:

  • 是的。但这只是一个字符串而不是字符串 []?
  • 非常感谢!你救了我的命。只是为了寻找如何在不携带 {""} 代码的情况下从 HashMap 中将值提取为字符串的方法而苦苦挣扎
【解决方案2】:
String[] drinkImages = (String[]) drinkList.get(0).values().toArray();

【讨论】:

    【解决方案3】:

    是的,这样的事情会起作用。

    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
    

    【讨论】:

      【解决方案4】:

      尝试迭代 HashMap 并从 HashMap 值构建 Array:

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-21
        • 2013-10-05
        • 2014-01-02
        • 2021-10-08
        • 2013-05-27
        • 1970-01-01
        • 2015-07-08
        • 2020-01-08
        相关资源
        最近更新 更多