-1

Я делаю один 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 отображается в случайном месте списка.

+0

Любой может помочь в этом? – Ricky

ответ

0

Почему вы загружаете изображение? Использование библиотеки UrlImageviewHelper. [

+0

Поскольку эти изображения размещаются на моем сервере, которые необходимо загрузить с помощью DownloadImageTask без какой-либо сторонней библиотеки/третьего лица. – Ricky

0
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; 
    Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
        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(); 
      } 
     } 
      } 
     }); 
     thread.start(); 




     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); 

    } 
} 
+0

Спасибо за модифицированный код. Я проверю то же самое и дам вам знать. Еще раз спасибо!!! – Ricky

+0

не работает ... возвращающее растровое изображение как null всегда из doinbackground – Ricky

Смежные вопросы