Java Android从web服务器获取图像到ImageView非现金副本

Java Android从web服务器获取图像到ImageView非现金副本,java,php,android,Java,Php,Android,我的android应用程序的一部分从web服务器(php)在ImageView上显示图像。 服务器上的图像名称具有相同的IMEI电话号码,以便手机识别属于它的图像 示例Imei为33245576544535,则图像为 www.example.uploads/33245576544535.jpg 问题是,当图像发生变化,但名称仍然相同时,手机会不断获取图像的旧现金副本 如何始终从我的服务器而不是现金服务器获取图像。 这是行动代码 提前谢谢你 package com.sunil.upload; i

我的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);
              }
            }

    }
package com.sunil.upload;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.MalformedURLException;
导入java.net.URL;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.telephony.TelephonyManager;
导入android.util.Log;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.ImageView;
公共类请参阅扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.look);
字符串phoneNo;
TelephonyManager TelephonyManager=(TelephonyManager)getSystemService(Context.TELEPHONY_服务);
phoneNo=telephonyManager.getDeviceId()+“”;
新下载的ImageTask((ImageView)findViewById(R.id.imageView1))
.执行(”http://example.com/uploads/“+phoneNo+”.jpg”);
}
私有类DownloadImageTask扩展了AsyncTask{
图像视图bmImage;
公共下载ImageTask(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon11=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();
mIcon11=BitmapFactory.decodeStream(in);
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon11;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}
}

向url添加唯一参数会使缓存始终丢失:

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

但是考虑使用一些其他的标识符而不是IMEI。收集IMEI对用户隐私有害,如果多个用户使用同一设备使用您的应用程序,则很可能无法正常工作

如果无法添加参数,可以尝试将“缓存控制:无缓存”和“Pragma:no Cache”头添加到请求中:

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

你的意思是改变网址吗。我无法更改url,因为它会丢失服务器上的图片并转到其他地方。如果服务器正确处理HTTP请求,向url添加GET参数应该无关紧要。