Как загрузить изображения с Parse-сервера, который хранится в виде файла, и отобразить его в пользовательском ListView в Android-Studio с помощью Java? - PullRequest
0 голосов
/ 15 июня 2019

Мне нужна помощь при загрузке изображений, сохраненных в виде файла на parse-сервере, и отображении их в listView

У меня есть несколько изображений, хранящихся на сервере синтаксического анализа в виде файла, я нахожу их с помощью запроса синтаксического анализа рядом с именем (String) и отображаю их в пользовательском списке просмотра, имена отображаются правильно в списке, но изображения тасуются, вероятно, потому что изображения, которые загружаются первыми, получают более низкий индекс.

пользовательский список Адаптер:

package com.xyz.abcd;

import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;


public class ListAdapter extends BaseAdapter {

Context context;
private final String [] values;
private final Bitmap[] images;

public ListAdapter(Context context, String [] values,  Bitmap [] images){
    //super(context, R.layout.single_list_app_item, utilsArrayList);
    this.context = context;
    this.values = values;
    this.images = images;
}

@Override
public int getCount() {
    return values.length;
}

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

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

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


    ViewHolder viewHolder;

    final View result;

    if (convertView == null) {

        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.custom_list, parent, false);
        viewHolder.txtName = (TextView) convertView.findViewById(R.id.aNametxt);
        viewHolder.icon = (ImageView) convertView.findViewById(R.id.appIconIV);

        result=convertView;

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
        result=convertView;
    }

    viewHolder.txtName.setText(values[position]);
    try {
        viewHolder.icon.setImageBitmap(images[position]);
    }catch (Exception e){
        e.printStackTrace();
    }

    return convertView;
}

private static class ViewHolder {

    TextView txtName;
    ImageView icon;

}

}


Это запрос:

ParseQuery query = new ParseQuery("userData");
        query.whereContains("Name",queryValues[0]);
        query.whereEqualTo("Gender",queryValues[1]);
        query.whereContains("Hair",queryValues[2]);
        query.whereContains("Eyes",queryValues[3]);
        query.whereContains("Height",queryValues[4]);
        query.whereNotEqualTo("Username", ParseUser.getCurrentUser().getUsername());
    query.addAscendingOrder("Name");

    query.findInBackground(new FindCallback() {
        @Override
        public void done(List list, ParseException e) {

        }

        @Override
        public void done(Object o, Throwable throwable) {
            if(throwable == null){

                List <ParseObject> list = (List<ParseObject>) o ;

                for(ParseObject object : list){
                    username.add( object.getString("Username"));
                    name.add(object.getString("Name"));
                    age.add(object.getInt("Age"));
                    facebook.add(object.getString("Facebook"));
                    instagram.add(object.getString("Instagram"));
                    snapchat.add(object.getString("Snapchat"));
                    whatsapp.add(object.getString("Whatsapp"));
                    heat.add(object.getInt("Heat"));
                    sem.add(object.getString("Sem")) ;
                    likes.add(object.getInt("Like")) ;

                    ParseFile file = object.getParseFile("ProfilePicture");
                    file.getDataInBackground(new GetDataCallback() {
                        @Override
                        public void done(byte[] bytes, ParseException e) {
                            if(e == null && bytes != null){
                                Bitmap bitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length); // image is downloaded here
                                images.add(bitmap); // added to arrayList

                                String[] NAMES = new String[name.size()];
                                NAMES = name.toArray(NAMES);

                                Bitmap[] IMAGES = new Bitmap[images.size()];
                                IMAGES = images.toArray(IMAGES); //ArrayList is converted to a Bitmap array

                                lAdapter = new ListAdapter(searchResults.this, NAMES, IMAGES); //names and images array is passed to adapter as arrays

                                ResultsList.setAdapter(lAdapter); //adapter is set

                                myInstance.dismiss(); //Loading bar dismisses

                            }else{
                                Log.i("Error",e.toString());
                            }
                        }
                    });

                }


            }else{
                Toast.makeText(searchResults.this, "Check connection", Toast.LENGTH_SHORT).show();
                myInstance.dismiss();
            }
        }
    });

Как сделать так, чтобы список отображался правильно в порядке с изображениями в этих позициях.

...