Android从web服务器获取图像到ImageView未兑现副本


Android get image to ImageView from web server not cashed copy

我的android应用程序的一部分从web服务器(php)在ImageView上显示图像。服务器上图像的名称具有相同的IMEI电话号码,这样手机就可以识别哪个图像属于它

示例Imei为33245576544535,则图像为www.example.uploads/33245576544535.jpg

问题是,当图像发生变化但名称仍然不变时,手机会不断获得旧的兑现图像副本。

如何始终从我的服务器而不是从现金服务器获取图像。这是操作代码提前感谢

package com.sunil.upload;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
    public class see extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.look);
            String  phoneNo;
             TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
                phoneNo=telephonyManager.getDeviceId()+"";
            new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
            .execute("http://example.com/uploads/"+phoneNo+".jpg");
        }

        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];
                  Bitmap mIcon11 = null;
                  try {
                    InputStream in = new java.net.URL(urldisplay).openStream();
                    mIcon11 = BitmapFactory.decodeStream(in);
                  } catch (Exception e) {
                      Log.e("Error", e.getMessage());
                      e.printStackTrace();
                  }
                  return mIcon11;
              }
              protected void onPostExecute(Bitmap result) {
                  bmImage.setImageBitmap(result);
              }
            }
    }

在url中添加一个唯一的参数会使缓存总是丢失:

    urldisplay = urldisplay + “?timestamp=“ + System.currentTimeMillis();
    InputStream in = new java.net.URL(urldisplay).openStream();

但是可以考虑使用IMEI以外的其他标识符。收集IMEI对用户隐私不利,如果多个用户在同一设备上使用您的应用程序,则很可能无法工作。

如果无法添加参数,您可以尝试在请求中添加"缓存控制:无缓存"answers"Pragma:无缓存"标题:

    URL url = new URL(urldisplay);
    URLConnection urlConnection = url.openConnection();
    urlConnection.setRequestProperty("Cache-Control", "no-cache");
    urlConnection.setRequestProperty(“Pragma”, "no-cache");
    InputStream in = new BufferedInputStream(urlConnection.getInputStream());