Я делаю один POC для своего проекта, где в ListView Android будут отображаться сведения о сотруднике, то есть имя, должность, зарплата вместе с его изображением.Неправильная настройка изображения в режиме просмотра асинхронного изображения ListView Android
Полные данные о сотрудниках поступают из базы данных. PFB Employee BO:
public class Employeeimplements Parcelable, Serializable {
@com.google.gson.annotations.SerializedName("id")
private String id;
@com.google.gson.annotations.SerializedName("name")
private String name;
@com.google.gson.annotations.SerializedName("position")
private String position;
@com.google.gson.annotations.SerializedName("displayUrl")
private String displayUrl;
// Getter, Setter and Parcelable method implementation.
}
Примечание: у каждого сотрудника есть другой URL-адрес изображения. Фрагмент кода PFB, который я использую:
loadEmplyeeData() {
// Lines of code to fetch List of employee from database.
// If fetched successful then broadcasting that ready to update view.
Intent broadcast = new Intent();
broadcast.setAction("employeedata.loaded");
sendBroadcast(broadcast);
}
OnReceive из Braodcast Я устанавливаю данные для адаптера:
// Other line of code
setListAdapter(new ListEmployeeAdapter());
ListAdapter является:
private class ListEmployeeAdapterextends BaseAdapter {
List<Employee> empList = this.employees;
@Override
public int getCount() {
return empList .size();
}
@Override
public Employee getItem(int arg0) {
return empList .get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@SuppressLint("InflateParams")
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) ListAidActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.listitem, null);
holder = new ViewHolder();
holder.empName = (TextView) convertView.findViewById(R.id.textView1);
holder.empPosition = (TextView) convertView.findViewById(R.id.textView2);
holder.empName.setTypeface(myTypeface);
holder.empPosition.setTypeface(myTypeface);
holder.imageView = (ImageView) convertView.findViewById(R.id.lstImage);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Employee emp = (Employee) empList.get(position);
holder.empName.setText(emp.getName());
holder.empPosition.setText(emp.getPosition());
if (holder.imageView != null && !CommonUtils.isEmpty(emp.getDisplayUrl())) {
new DownloadImageTask((ImageView)holder.imageView).execute(emp.getDisplayUrl());
}
return convertView;
}
public Employee getMyEmplyeeItem(int position) {
return empList.get(position);
}
class ViewHolder {
TextView empName;
TextView empPosition;
ImageView imageView;
}
}
PFB Загрузить изображение Асинхронный задача:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
HttpURLConnection urlConnection = null;
Bitmap mIcon11 = null;
try {
if (urldisplay == null) {
return null;
} else {
URL uri = new URL(urldisplay);
urlConnection = (HttpURLConnection) uri.openConnection();
int statusCode = urlConnection.getResponseCode();
if (statusCode != HttpStatus.SC_OK) {
return null;
}
if (urlConnection != null) {
InputStream in = urlConnection.getInputStream();
if (in != null) {
mIcon11 = BitmapFactory.decodeStream(in);
return mIcon11;
} else {
return null;
}
} else {
return null;
}
}
} catch (Exception e) {
if (urlConnection != null) {
urlConnection.disconnect();
}
Log.e("", e.getLocalizedMessage());
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
if (result != null) {
bmImage.setImageBitmap(result);
} else {
Drawable placeholder = bmImage.getContext().getResources().getDrawable(R.drawable.default_img);
bmImage.setImageDrawable(placeholder);
}
bmImage.setScaleType(ScaleType.FIT_XY);
}
}
Просьба предложить любое решение, так как изображения получают неверное представление @image. Чтобы быть точным, изображение emplyee отображается в случайном месте списка.
Любой может помочь в этом? – Ricky