使用getdatainbackground(android)从解析中检索多个图像

时间:2015-02-28 15:54:57

标签: android parse-platform

我是Android的新手,真的需要熟悉Parse API的帮助。我所做的是设置我的卡片容器,里面装满了多张图片。然而,真实显示按照“DownloadBitmap”以随机顺序显示卡片而不是按照我的想法升序。可疑的根本原因可能是通过“getdatainbackground()”运行的延迟时间。有谁知道这个混乱的问题怎么能解决?我尝试使用“getdata()”代替,但它确实杀死了性能,似乎不是一个好选择。我的代码如下。

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("food");
    query.orderByAscending("order");
    query.setLimit(10);
    query.findInBackground(new FindCallback<ParseObject>() {

        @Override
        public void done(final List<ParseObject> objects, ParseException e) {
            for (ParseObject obj_food : objects) {
                if (obj_food.getInt("order") == order) {

                    final ParseFile file = obj_food.getParseFile("picture");        

                    //bitmap
                    file.getDataInBackground(new GetDataCallback() {
                        public void done(byte[] data, ParseException e) {
                            if (e == null) {                                    
                                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                                DownloadBitmap.add(bitmap);
                            }                               
                        }
                    });
                }
                order++;
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

您的主qry应该将链接的URL的JSON返回到您的位图的Parse.files。

您应该使用图像库(UIL,Picasso,AQuery ...)来管理方面(网络GET,缓存GET),基于该卡的Layout.VIEW的asNeeded位图。

当您需要卡的布局/视图的bitMap时,您只需让图像库管理它......这些库旨在用于“getView()”工作流程。

示例AQry(parms参考视图和图像的Url列表)

 private static AQuery mAq;
            mAq.id(holder.imgView).width(110).image(mm.getImages().get(0).getUrl().toString(),
                    true, true, 0, R.drawable.default_video, null, 0, mAspectRatio);

example Picasso


        @Override public View getView(int i, View view, ViewGroup viewGroup) {
            //TODO how is this called w val=-1
            if(i < 0) i = 0;
            ViewHolder viewHolder;
            if (view == null) {
                viewHolder = new ViewHolder();
                view = LayoutInflater.from(viewGroup.getContext())
                        .inflate(R.layout.grid_item, viewGroup, false);
                viewHolder.image = (ImageView) view.findViewById(R.id.image);
                viewHolder.text = (TextView) view.findViewById(R.id.text);
                view.setTag(viewHolder);
            }else{
                viewHolder = (ViewHolder) view.getTag();
            }

            Picasso.with(view.getContext())
                    .load(HomeActivity.getUrlbyPosition(i))
                    .into(viewHolder.image);

            if (HomeActivity.getMsgByPosition(i).length() > 39) {
                viewHolder.text.setText(HomeActivity.getMsgByPosition(i).substring(0, 39));
            }else{viewHolder.text.setText(HomeActivity.getMsgByPosition(i));
            }
            return view;
        }