2016-03-05 137 views
1

我想从URL列表中显示图像,当没有图像URL来自服务端时,我想显示特定索引的默认图像。为此,我在array adapter中使用了Volley进行图片加载。现在我的问题是当我使用默认图像,然后图像显示不正确,有时它与另一个图像重叠。而当我没有使用默认图像,那么它工作正常。这是我的代码,请告诉我这有什么问题?提前致谢。使用Volley加载图像

这里是我的Adapter类,

public class CustomLocalAlertAdapter extends ArrayAdapter<LocalListItem> 
     implements AppConstants { 

    Activity a; 
    ViewHolder holder; 

    ImageView mImageview; 
    private Object mImageLoader; 

    @SuppressWarnings("static-access") 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     // return super.getView(position, convertView, parent); 
     LocalListItem LocalList = getItem(position); 

     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(
        R.layout.activity_add_local_all_alert_details, parent, 
        false); 

      holder = new ViewHolder(); 

      holder.missingTitle = (TextView) convertView 
        .findViewById(R.id.missingTitle); 
      holder.missingDetails = (TextView) convertView 
        .findViewById(R.id.missingDetails); 

      holder.missingImage = (NetworkImageView) convertView 
        .findViewById(R.id.missingImage); 
      holder.suspectImage = (NetworkImageView) convertView 
        .findViewById(R.id.suspectImage); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     String allAlertSuspectDetails = ""; 

     String allAlertVehicleDetails = ""; 

     String allAlertPersonDetails = ""; 

     if (LocalList.title.equalsIgnoreCase("missing_vehicle_report")) { 

      allAlertPersonDetails = ""; 
      allAlertSuspectDetails = ""; 
      holder.missingTitle.setText("Missing Vehicle"); 

      allAlertVehicleDetails = "\n" + "Year: " + LocalList.Year + "\n" 
        + "Make: " + LocalList.Make + "\n" + "Model: " 
        + LocalList.Model + "\n" + "Color: " + LocalList.Color 
        + "\n" + "LisencePlateNo: " + LocalList.LisencePlateNo 
        + "\n" + "Vin: " + LocalList.Vin + "\n" + "Place: " 
        + LocalList.Place; 

      holder.suspectImage.setVisibility(View.GONE); 

     } else { 

      holder.suspectImage.setVisibility(View.VISIBLE); 

      allAlertVehicleDetails = ""; 

      holder.missingTitle.setText("Missing Person"); 

      allAlertPersonDetails = "\n" + "Name: " + LocalList.personName 
        + "\n" + "Height: " + LocalList.height + "\n" 
        + "Unique Mark: " + LocalList.uniqueMark + "\n" 
        + "Last seen: " + LocalList.lastSeen + "\n" 
        + "Date Missing: " + LocalList.dateMissing + "\n" 
        + "Police department: " + LocalList.policeDept + "\n" 
        + "Police dept.phone: " + LocalList.policePhn + "\n" + "\n"; 

      if (LocalList.suspectName.equalsIgnoreCase("") 
        || LocalList.suspectName.equalsIgnoreCase("null") 
        || LocalList.suspectName.equalsIgnoreCase(" ")) { 
       allAlertSuspectDetails = ""; 

       holder.suspectImage.setVisibility(View.GONE); 

      } else { 
       allAlertSuspectDetails = "Suspect name: " 
         + LocalList.suspectName + "\n" + "Vehicle Color: " 
         + LocalList.vehicleColor + "\n" + "Vehicle Year: " 
         + LocalList.vehicleYear + "\n" + "Vehicle Make: " 
         + LocalList.vehicleMake + "\n" + "Vehicle Model: " 
         + LocalList.vehicleModel; 
      } 
     } 


     holder.missingDetails.setText(allAlertVehicleDetails 
       + allAlertPersonDetails + allAlertSuspectDetails); 

     if (LocalList.title.equalsIgnoreCase("missing_vehicle_report")) { 
      if (LocalList.vehicleImg.trim().equalsIgnoreCase(
        "")) { 

       holder.missingImage.setImageResource(R.drawable.no_image_found); 
      } else { 

       holder.missingImage.setImageUrl(LocalList.vehicleImg, 
         VolleySingleton.getInstance(getContext()) 
           .getImageLoader()); 
      } 
     } else { 
      if (LocalList.personImage.trim().equalsIgnoreCase(
        "")) { 
       holder.missingImage.setImageResource(R.drawable.no_image_found); 

      } else { 

       holder.missingImage.setImageUrl(LocalList.personImage, 
         VolleySingleton.getInstance(getContext()) 
           .getImageLoader()); 
      } 
      if (LocalList.suspectImage.trim().equalsIgnoreCase(
        "")) { 
       holder.suspectImage.setImageResource(R.drawable.no_image_found); 

      } else { 

       holder.suspectImage.setImageUrl(LocalList.suspectImage, 
         VolleySingleton.getInstance(getContext()) 
           .getImageLoader()); 
      } 

     } 

     return convertView; 

    } 

    public static class ViewHolder { 

     TextView missingTitle; 
     TextView missingDetails; 
     NetworkImageView missingImage; 
     NetworkImageView suspectImage; 
    } 

    public CustomLocalAlertAdapter(Context context, 
      ArrayList<LocalListItem> ListItem, Activity a) { 
     super(context, 0, ListItem); 
     // TODO Auto-generated constructor stub 
     this.a = a; 

    } 

} 

这里是我的VolleySingleton类,

public class VolleySingleton { 
    private static VolleySingleton instance; 
    private RequestQueue requestQueue; 
    private static ImageLoader imageLoader; 

    private VolleySingleton(Context context) { 
     requestQueue = Volley.newRequestQueue(context); 
     imageLoader = new ImageLoader(requestQueue, 
       new ImageLoader.ImageCache() { 
        private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20); 

        @Override 
        public Bitmap getBitmap(String url) { 
         return cache.get(url); 
        } 

        @Override 
        public void putBitmap(String url, Bitmap bitmap) { 
         cache.put(url, bitmap); 
        } 
       }); 
    } 

    public static VolleySingleton getInstance(Context context) { 
     if (instance == null) { 
      instance = new VolleySingleton(context); 
     } 
     return instance; 
    } 

    public RequestQueue getRequestQueue() { 
     return requestQueue; 
    } 

    public static ImageLoader getImageLoader() { 
     return imageLoader; 
    } 
} 
+0

最好的方法 - 只有一行你的问题可以解决。只需在适配器中传递图像链接和图像浏览。 Picasso.with(上下文).load( “http://i.imgur.com/DvpvklR.png”).into(ImageView的);用它来导入liabrary链接 - https://github.com/square/picasso – Ajinkya

回答

0

首先创建一个文件MultipartRequest如下:

public class MultipartRequest extends Request<String> { 
private MultipartEntityBuilder entity = MultipartEntityBuilder.create(); 
private final Response.Listener<String> mListener; 
private final File file; 
private final HashMap<String, String> params; 

public MultipartRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener, File file, HashMap<String, String> params) 
{ 
    super(Method.POST, url, errorListener); 

    mListener = listener; 
    this.file = file; 
    this.params = params; 
    buildMultipartEntity(); 
    buildMultipartEntity2(); 

} 



private void buildMultipartEntity() 
{ 
    entity.addBinaryBody(KEY_IMAGE, file, ContentType.create("image/jpeg"), file.getName()); 
    entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
    entity.setLaxMode().setBoundary("xx").setCharset(Charset.forName("UTF-8")); 

    try 
    { 
     for (String key : params.keySet()) { 
      entity.addPart(key, new StringBody(params.get(key))); 
     } 
    } 
    catch (UnsupportedEncodingException e) 
    { 
     VolleyLog.e("UnsupportedEncodingException"); 
    } 
} 

@Override 
public String getBodyContentType() 
{ 
    return entity.build().getContentType().getValue(); 
} 
@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    Map<String, String> headers = super.getHeaders(); 

    if (headers == null 
      || headers.equals(Collections.emptyMap())) { 
     headers = new HashMap<String, String>(); 
    } 

    headers.put("Accept", "application/json"); 

    return headers; 
} 

@Override 
public byte[] getBody() throws AuthFailureError 
{ 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    try 
    { 
     entity.build().writeTo(bos); 
    } 
    catch (IOException e) 
    { 
     VolleyLog.e("IOException writing to ByteArrayOutputStream"); 
    } 
    return bos.toByteArray(); 
} 
/** 
* copied from Android StringRequest class 
*/ 
@Override 
protected Response<String> parseNetworkResponse(NetworkResponse response) { 
    String parsed; 
    try { 
     parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
    } catch (UnsupportedEncodingException e) { 
     parsed = new String(response.data); 
    } 
    return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); 
} 

@Override 
protected void deliverResponse(String response) { 
    mListener.onResponse(response); 
}} 

在你活动只是使多部分请求如下所示:

public void uploadImage() 
{ 
    try { 
     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Loading..."); 
     pDialog.show(); 

      HashMap params = new HashMap<String, String>(); 

      params.put(KEY_NAME, name); 
     MultipartRequest sr = new MultipartRequest(UPLOAD_URL, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       if ((pDialog != null) && pDialog.isShowing()) { 
        pDialog.dismiss(); 
       } 
       Log.d("file", f + ""); 
       Log.d("", ".......response====" + response.toString()); 

       //////// 
       try { 
        JSONObject object = new JSONObject(response); 
        String serverCode = object.getString("code"); 
        if (serverCode.equalsIgnoreCase("0")) { 

        } 
        if (serverCode.equalsIgnoreCase("1")) { 
         try { 

          if ("1".equals(serverCode)) { 
           JSONObject object1 = object.getJSONObject("data"); 

          } 
         }