想ArrayList的&LT转换; HashMap的<弦乐,对象>>字符串 [英] Want to convert ArrayList<HashMap<String, Object>> to string

查看:136
本文介绍了想ArrayList的&LT转换; HashMap的<弦乐,对象>>字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读<一个href=\"https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/UniversalImageLoaderExample/src/com/nostra13/example/universalimageloader/ImageGridActivity.java\"相对=nofollow>通用图像装载机和我做的应用程序,具有GridView和JSON从这个GridView中获取图像。但我的应用程序加载很慢,所以我想用通用图像装载机但 getView 函数在ImageAdapeter类通用图像装载机用它像

imageLoader.displayImage(imageUrls [位置],ImageView的,期权); 或公式
imageLoader.displayImage(字符串,ImageView的,期权);

所以,我没有一个字符串来完成这个公式。我只可以创建对象改编存储的ArrayList

我如何转换的ArrayList&LT; HashMap的&LT;弦乐,对象&gt;&GT; 来的字符串或改变我的code任何方式

请确认或意见或建议我可以。易于阅读我的code

下面这个是我ImageAdapter。它做工精细,但如此缓慢。

 公共类ImageAdapter延伸BaseAdapter {
    私人上下文的背景下;
    私人的ArrayList&LT;&HashMap的LT;弦乐,对象&gt;&GT; myArr,该=新的ArrayList&LT;&HashMap的LT;弦乐,对象&gt;&GT;();    公共ImageAdapter(上下文C,ArrayList的&LT;&HashMap的LT;弦乐,对象&gt;&GT; myArrList){
        上下文= C;
        myArr,该= myArrList;
    }    公众诠释的getCount(){
        返回MyArr.size();
    }    公共对象的getItem(INT位置){
        返回的位置;
    }    众长getItemId(INT位置){
        返回的位置;
    }    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        ViewHolder viewHolder;
        viewHolder =新ViewHolder();        LayoutInflater吹气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        如果(convertView == NULL){
            convertView = inflater.inflate(R.layout.grid_item,NULL);
        }
        viewHolder.categoryCard =(ImageView的)convertView.findViewById(R.id.category_card);
        // ====================变化领域
        对象ARR =新的ArrayList&LT;&HashMap的LT;弦乐,对象&gt;&GT;(); //使objec ARR存储数组列表
        ARR = MyArr.get(位置)获得(类别ID);
        如果(arr.equals(1)){
            viewHolder.categoryCard.setImageResource(R.drawable.card_eat);
            viewHolder.imageView =(ImageView的)convertView.findViewById(R.id.imageView1);
        }其他{
            viewHolder.categoryCard.setImageResource(R.drawable.card_etc);
            viewHolder.imageView =(ImageView的)convertView.findViewById(R.id.imageView1);
        }
        // =============================
        尝试{
            viewHolder.imageView.setImageBitmap((位图)MyArr.get(位置)获得(ImageThumBitmap));
        }赶上(例外五){
            viewHolder.imageView.setImageResource(android.R.drawable.ic_menu_report_image);
        }        返回convertView;    }}
在后台下载// JSON
公共类DownloadJSONFileAsync扩展的AsyncTask&LT;弦乐,太虚,太虚&GT; {
    。字符串标记= getIntent()getExtras()的getString(TOKEN1);    在preExecute保护无效(){
        super.on preExecute();
        的ShowDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
    }    @覆盖
    保护无效doInBackground(字符串... PARAMS){        字符串URL =htt​​p://xxx.xxx.xxx/card/all/20/0/?token=\"+token;
        JSONArray数据= NULL;
        尝试{            的JSONObject的JSONObject =新的JSONObject(getJSONUrl(URL));            MyArrList =新的ArrayList&LT;&HashMap的LT;弦乐,对象&gt;&GT;();
            HashMap的&LT;弦乐,对象&gt;地图;
            数据= jsonObject.getJSONArray(数据);
            的for(int i = 0; I&LT; data.length();我++){
                JSONObject的C = data.getJSONObject(I)
                地图=新的HashMap&LT;弦乐,对象&gt;();                //缩略图获取ImageBitmap到对象
                map.put(cardimage(字符串)c.getString(cardimage));
                map.put(ImageThumBitmap,(位图)loadBitmap(c.getString(cardimage)));
                map.put(类别ID(字符串)c.getString(类别ID));
                MyArrList.add(地图);
            }        }赶上(JSONException E){
            // TODO自动生成catch块
            e.printStackTrace();
        }        返回null;
    }    保护无效onPostExecute(虚空未使用){
        ShowAllContent(); //当完成显示内容
        dismissDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
        removeDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
    }}

这是ImageAdapter了来自<一个href=\"https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/UniversalImageLoaderExample/src/com/nostra13/example/universalimageloader/ImageGridActivity.java\"相对=nofollow>通用图像装载机

 公共类ImageAdapter延伸BaseAdapter {
    @覆盖
    公众诠释的getCount(){
        返回imageUrls.length;
    }    @覆盖
    公共对象的getItem(INT位置){
        返回null;
    }    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        最后ImageView的ImageView的;
        如果(convertView == NULL){
            ImageView的=(ImageView的)getLayoutInflater()膨胀(R.layout.item_grid_image,父母,假的)。
        }其他{
            ImageView的=(ImageView的)convertView;
        }
                     //我想做这样的
        imageLoader.displayImage(imageUrls [位置],ImageView的,期权);        返回ImageView的;
    }
}


解决方案

如果你想保持的ArrayList&LT; HashMap的&LT;弦乐,对象&gt;&GT; 你必须创建一个新的的String [] 是这样的:

 的String [] =网址,新的String [MyArrList.size()];
的for(int i = 0; I&LT; MyArrList.size();我++){
   网址[I] = MyArrList.get(I)获得(cardimage);
}

PS。我使用变量名MyA​​rrList如您在code宣布,顺便说一句这不是一个好主意,用大写字母开头的变量名。

PS2。我认为,如果你要使用通用图像装载机你也许不再需要每一个位图存储在HashMap中

I read the Universal Image Loader and I make application that has gridview and this gridview get image from json. but my application load so slow, so I want to use Universal Image Loader but getView function in Universal Image Loader in ImageAdapeter class it use like that

imageLoader.displayImage(imageUrls[position], imageView, options); or for formula imageLoader.displayImage(String, imageView, options);

So I don't have a string to complete this formula. I just can create Object arr to store Arraylist.

How can I convert ArrayList<HashMap<String, Object>> to string or any ways to change my code?

Please confirm or advice or recommend me as you can. easy to read my code

Below this is my ImageAdapter. it work fine but so slow.

public class ImageAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<HashMap<String, Object>> MyArr = new ArrayList<HashMap<String, Object>>();

    public ImageAdapter(Context c, ArrayList<HashMap<String, Object>> myArrList) {
        context = c;
        MyArr = myArrList;
    }

    public int getCount() {
        return MyArr.size();
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        viewHolder = new ViewHolder();

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.grid_item, null);
        }
        viewHolder.categoryCard = (ImageView) convertView.findViewById(R.id.category_card);
        //==================== change area
        Object arr = new ArrayList<HashMap<String, Object>>(); // make objec arr to store arraylist
        arr = MyArr.get(position).get("categoryid");
        if (arr.equals("1")) {
            viewHolder.categoryCard.setImageResource(R.drawable.card_eat);
            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
        } else {
            viewHolder.categoryCard.setImageResource(R.drawable.card_etc);
            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
        }
        // =============================
        try {
            viewHolder.imageView.setImageBitmap((Bitmap) MyArr.get(position).get("ImageThumBitmap"));
        } catch (Exception e) {
            viewHolder.imageView.setImageResource(android.R.drawable.ic_menu_report_image);
        }

        return convertView;

    }

}


// Download JSON in Background
public class DownloadJSONFileAsync extends AsyncTask<String, Void, Void> {
    String token = getIntent().getExtras().getString("token1");

    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
    }

    @Override
    protected Void doInBackground(String... params) {

        String url = "http://xxx.xxx.xxx/card/all/20/0/?token="+token;
        JSONArray data = null;
        try {

            JSONObject jsonObject = new JSONObject(getJSONUrl(url));

            MyArrList = new ArrayList<HashMap<String, Object>>();
            HashMap<String, Object> map;
            data = jsonObject.getJSONArray("data");
            for (int i = 0; i < data.length(); i++) {
                JSONObject c = data.getJSONObject(i);
                map = new HashMap<String, Object>();

                // Thumbnail Get ImageBitmap To Object
                map.put("cardimage", (String) c.getString("cardimage"));
                map.put("ImageThumBitmap",(Bitmap) loadBitmap(c.getString("cardimage")));
                map.put("categoryid", (String) c.getString("categoryid"));
                MyArrList.add(map);
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(Void unused) {
        ShowAllContent(); // When Finish Show Content
        dismissDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
        removeDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
    }

}

This is ImageAdapter that come from Universal Image Loader

public class ImageAdapter extends BaseAdapter {
    @Override
    public int getCount() {
        return imageUrls.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ImageView imageView;
        if (convertView == null) {
            imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
        } else {
            imageView = (ImageView) convertView;
        }
                     // I want to do like this
        imageLoader.displayImage(imageUrls[position], imageView, options);

        return imageView;
    }
}

解决方案

if you want to keep the ArrayList<HashMap<String, Object>> you have to create a new String[] this way:

String[] urls = new String[MyArrList.size()];
for(int i=0; i<MyArrList.size(); i++){
   urls[i] = MyArrList.get(i).get("cardimage");
}

PS. I've used the variable name MyArrList as you declared in your code, by the way it's not a good idea to start a variable name with a capital letter.

PS2. I think that if you want to use the Universal Image Loader you'll maybe no longer need to store each Bitmap in the HashMap

这篇关于想ArrayList的&LT转换; HashMap的&LT;弦乐,对象&gt;&GT;字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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