【问题标题】:How to get Image from ParseObject?如何从 ParseObject 中获取图像?
【发布时间】:2015-07-05 22:20:00
【问题描述】:

我正在使用此代码从我的ParseObject 获取姓名和年龄字符串 在解析中。我假设我也可以对图像文件做同样的事情。但是此代码不适用于图像。我可能做错了。或者也许我需要做一些完全不同的事情。有人可以帮我从parseObject 获取我的图像文件吗? 谢谢

public class MyAdapter extends ArrayAdapter<ParseObject> {

protected Context mContext;
protected List<ParseObject> MyPerson;

public MyAdapter (Context context, List<ParseObject> MyPerson){
    super(context, R.layout.scustomlayout, MyPerson);
    mContext = context;
    mPerson = MyPerson;
}

@Override
public View getView (final int position, View convertView, ViewGroup Parent){
    final ViewHolder holder;

    if(convertView == null) {
      convertView = LayoutInflater.from(mContext).inflate(R.layout.personcustomlayout, null);
        holder = new ViewHolder();
        holder.NameMain = (TextView) convertView.findViewById(R.id.NameHP);
        holder.AgeMain = (TextView) convertView.findViewById(R.id.AgeHP);
        holder.ImageMain = (ImageView) convertView.findViewById(R.id.ImageHP);

        convertView.setTag(holder);


    }else {
        holder = (ViewHolder) convertView.getTag();
    }

        ParseObject personObject = mPerson.get(position);


        //name
        String name = personObject.getString("Name");
        holder.NameMain.setText(name);

        //Age
        String age = personObject.getString("Age");
        holder.AgeMain.setText(age);

        ParseFile image = (ParseFile) personObject.get("Image");
        image.getDataInBackground(new GetDataCallback() {
            public void done(byte[] data, ParseException e) {
                if (e == null) {
                    // Decode the Byte[] into bitmap
                    Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                    // Set the Bitmap into the imageView
                    holder.ImageMain.setImageBitmap(bmp);
                } else {
                    Log.d("test", "There was a problem downloading the data.");
                }
            }
        });

    return convertView;
}

public static class ViewHolder {
    ImageView ImageMain;
    TextView NameMain;
    TextView AgeMain;
}
}

【问题讨论】:

    标签: android image parse-platform


    【解决方案1】:
    ParseFile image = (ParseFile) personObject.get("Image");
    image.getDataInBackground(new GetDataCallback() {
        public void done(byte[] data, ParseException e) {
            if (e == null) {
                // Decode the Byte[] into bitmap
                Bitmap bmp = BitmapFactory.decodeByteArray(data, 0,data.length);
                // Set the Bitmap into the imageView
                holder.ImageMain.setImageBitmap(bmp);
            } else {
                Log.d("test", "There was a problem downloading the data.");
            }
        }
    });
    

    另外,将其添加到导入中:

    import com.parse.ParseException;
    

    【讨论】:

    • 这不起作用。使用此代码时,GetDataCallBack 和 holder 下出现红线。
    • 从内部类中访问变量“holder”,需要声明为final。类“从 GetCallBack 派生的匿名类”必须在 GetDataCallBack 中声明为抽象或实现抽象方法“done (byte[], ParseExcpetion)。
    • 是的,将持有人声明为final。并且done方法正在实现中。
    • 当我做final时,它说unexpected token。
    • 在您创建变量的顶部。
    【解决方案2】:

    更简单更好的选择是获取文件 URL 并通过第三方库(例如 PicassoGlide)将其加载到 ImageView 中。这样,您的代码就不会那么繁琐,ListView 滚动流畅,不会经常遇到 OOM 错误。

    ParseFile image = (ParseFile) personObject.get("Image");
    String url = image.getUrl();
    
    // With Picasso
    Picasso.with(mContext).load(url).into(holder.ImageMain);
    
    // With Glide
    Glide.with(mContext).load(url).into(holder.ImageMain);
    

    不需要创建新的String对象url,你可以直接创建,我只是为了更容易理解。

    另外,最好在运行 ParseQuery 时将 URL 保存到 MyPerson 对象,这样可以加快图像加载速度

    【讨论】:

    • 在我的 RecyclerView 适配器中,除了 parseList.get(position).get("Image").getUrl(); 之外,一切都可以正常工作。尽管文件存在,但我每次都会收到空指针异常...
    • 在调用 getUrl() 之前验证 parseList.get(position).get("Image") if (parseList.get(position).get("Image") != null) { ParseFile urlImageFile = ParseFile)object.get("position").get("images"); urlImage = urlImageFile.getUrl(); } else { // 没有图片 }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多