如何从存储为文件的解析服务器加载图像,并使用Java将其显示到Android-Studio中的自定义ListView



>我需要帮助加载存储在解析服务器上的文件并在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();
            }
        }
    });

如何使列表正确显示,使图像位于该位置。

解决方案:使用滑动库,异步加载图像并有序地将它们加载到 UI

最新更新