使用自定义适配器中的自定义ArrayList <MyOwnParseClass>在ListView中设置ParseFile图像

0 android listview adapter listviewitem parse-platform

我使用ListView来显示解析的所有记录.使用名为ListadoObjetoParse的自定义类,它包含一些属性,如名称,地址ParseFile,最后一个包含记录的图像.包含所有内容的数据对象是ListadoObjetoParseArrayList,称为datos.尝试获取图像(ParseFile)时,问题出现在自定义适配器(RestaurantesAdapter)中,并从名为"datos"的对象填充listView.无法将图像作为ParseFile获取并转换为Bitmap以显示在listView中.我只看过一种使用GetDAtaInBackGround方法的方法.下面我展示了CustomAdapter和Class ListadoObjetoParse.

我很感激任何帮助,因为我长时间被困住了.非常感谢你

/ CUSTOM ADAPTER /

public class RestaurantesAdapter extends ArrayAdapter<ListadoObjetoParse> {
   private Context context;
   private ArrayList<ListadoObjetoParse> datos;

   public RestaurantesAdapter(Context context, ArrayList<ListadoObjetoParse> datos) {
      super(context, R.layout.activity_mostrar_listado_restaurantes, datos);
      this.context = context;
      this.datos = datos;
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {

         View item = LayoutInflater.from(context).inflate(
            R.layout.mostrar_listado_detalle_restaurante, null);


         final ImageView imagen = (ImageView) item.findViewById(R.id.imgRestaurante);

         //Here i fetch Image from the class ListadoObjetoParse with method getImagen             
         ParseFile i = datos.get(position).getImagen();

         /*Expected to do this, but of course not possible convert*/
         Bitmap i = (Bitmap) datos.get(position).getImagen();



       /*Example Way that is shown in tutorials and parse to fetch the image. But doesn't work for my "datos" object*/
        i.getDataInBackground(new GetDataCallback() {
        public void done(byte[] data, ParseException e) {
            if (e == null) {

                //Convert ParseFile image of item to Bitmap and show in the listItem
                Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                imagen.setImageBitmap(bmp);


            } else {
                Log.d("test", "There was a problem downloading the data.");

            }
        }
    });

    //Setting name of item in listview
    TextView nombre = (TextView) item.findViewById(R.id.tvNombre);
    nombre.setText(datos.get(position).getNombre());

    //Setting phone number of item in listview
    TextView telefono = (TextView) item.findViewById(R.id.tvTelefono);
    telefono.setText(datos.get(position).getTelefono());

   //Setting address of item in listview
    TextView direccion = (TextView) item.findViewById(R.id.tvDireccion);
    direccion.setText(datos.get(position).getDireccion());

    return item;
}
Run Code Online (Sandbox Code Playgroud)

/ LISTADOOBJECTOPARSE.CLASS /

公共类ListadoObjetoParse {

private String nombre;
private String direccion;
private String ciudad;
private String telefono;
private ParseFile imagen;


//*CONSTRUCT*/

public ListadoObjetoParse() {} 

public ListadoObjetoParse(String nombre, String ciudad, String direccion, String telefono){
    this.nombre = nombre;
    this.ciudad = ciudad;
    this.direccion = direccion;
    this.telefono = telefono;

}

public ListadoObjetoParse(String nombre, String ciudad, String direccion, String telefono, ParseFile imagen){
    this.nombre = nombre;
    this.ciudad = ciudad;
    this.direccion = direccion;
    this.telefono = telefono;
    this.imagen = imagen;
}


/*METHODS*/

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public String getCiudad() {
    return ciudad;
}

public void setCiudad(String ciudad) {
    this.ciudad = ciudad;
}

public String getDireccion() {
    return direccion;
}

public void setDireccion(String direccion) {
    this.direccion = direccion;
}

public String getTelefono() {return telefono;}

public void setTelefono(String telefono) {this.telefono = telefono;}


public ParseFile getImagen() {return imagen;}

public void setImagen(ParseFile imagen) {
    this.imagen = imagen;
}
Run Code Online (Sandbox Code Playgroud)

}

eug*_*eek 5

首先 尝试使用ParseImageView代替Image视图并加载ParseFiles native:

ParseFile file;
ParseImageView imageView = (ParseImageView) findViewById(android.R.id.icon);
imageView.setParseFile(file);
imageView.loadInBackground(new GetDataCallback() {
   @Override
   public void done(byte[] data, ParseException e) {

   }
 });
Run Code Online (Sandbox Code Playgroud)

或者只是imageView.loadInBackground()你不需要回调.

更多解析文档

第二

ParseFile file;
ImageView imageView = (ImageView) findViewById(android.R.id.icon);
byte[] bitmapdata = file.getData();
Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata , 0, bitmapdata.length);
imageView.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)