gpt4 book ai didi

android - 缓存从互联网上获取的图像?

转载 作者:行者123 更新时间:2023-11-29 02:11:51 25 4
gpt4 key购买 nike

我想缓存我通过互联网获取的图像。这样每次在图库里刷图,就不会每次都去取了。如果有人能告诉我如何使用这段代码做到这一点,我们将不胜感激。

 if(Build.VERSION.SDK_INT >= 11){
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}


my.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
startActivity(n);

}
});
gameNews.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

}
});

//Executing AsyncTask in background thread to get images.
MyTask myTask = new MyTask();

myTask.execute();

}

获取图像方法:

//Method to get images from text documents that will by updated every month.

public void getImages() throws IOException{


DefaultHttpClient httpclient = new DefaultHttpClient();

HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt");
HttpResponse response;

response = httpclient.execute(httppost);


HttpEntity ht = response.getEntity();

BufferedHttpEntity buf = new BufferedHttpEntity(ht);

InputStream is = buf.getContent();


BufferedReader r = new BufferedReader(new InputStreamReader(is));

StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line + "\n");

imageUrl = total.toString();
Log.v("getImage1", "Retreived image");
}
}



public void getImage2() throws IOException{

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImage2.txt");
HttpResponse response;


response = httpclient.execute(httppost);


HttpEntity ht = response.getEntity();

BufferedHttpEntity buf = new BufferedHttpEntity(ht);

InputStream is = buf.getContent();


BufferedReader r = new BufferedReader(new InputStreamReader(is));

StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line + "\n");

imageUrl2 = total.toString();
Log.v("getImage2", "Retreived image");
}
}



public void getImage3() throws IOException{

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webimage3.txt");
HttpResponse response;


response = httpclient.execute(httppost);


HttpEntity ht = response.getEntity();

BufferedHttpEntity buf = new BufferedHttpEntity(ht);

InputStream is = buf.getContent();


BufferedReader r = new BufferedReader(new InputStreamReader(is));

StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line + "\n");

imageUrl3 = total.toString();
Log.v("getImage3", "Retreived image");
}

}

public void getImage4() throws IOException{

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImage4.txt");
HttpResponse response;


response = httpclient.execute(httppost);


HttpEntity ht = response.getEntity();

BufferedHttpEntity buf = new BufferedHttpEntity(ht);

InputStream is = buf.getContent();


BufferedReader r = new BufferedReader(new InputStreamReader(is));

StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line + "\n");

imageUrl4 = total.toString();


}
}

ImageAdapter 类:

                    //ImageAdapter that gets the URL of the images and put them in a format to be set to gallery
public class ImageAdapter extends BaseAdapter {
/** The parent context */
private Context myContext;public ImageAdapter() {
// TODO Auto-generated constructor stub
}
/** URL-Strings to some remote images. */

public String[] myRemoteImages = {imageUrl,imageUrl2,imageUrl3,imageUrl4};






/** Simple Constructor saving the 'parent' context. */
public ImageAdapter(Context c) { this.myContext = c; }





/** Returns the amount of images we have defined. */
public int getCount() { return this.myRemoteImages.length; }

/* Use the array-Positions as unique IDs */
public Object getItem(int position) { return position; }
public long getItemId(int position) { return position; }

/** Returns a new ImageView to
* be displayed, depending on
* the position passed. */
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(this.myContext);

try {

URL aURL = new URL(myRemoteImages[position]);
URLConnection conn = aURL.openConnection();

conn.connect();

InputStream is = conn.getInputStream();
/* Buffered is always good for a performance plus. */
BufferedInputStream bis = new BufferedInputStream(is);
/* Decode url-data to a bitmap. */

Bitmap bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
Log.v(imageUrl, "Retrieving image");

/* Apply the Bitmap to the ImageView that will be returned. */
i.setImageBitmap(bm);
} catch (IOException e) {

Log.e("DEBUGTAG", "Remtoe Image Exception", e);
}

/* Image should be scaled as width/height are set. */
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
/* Set the Width/Height of the ImageView. */
i.setLayoutParams(new Gallery.LayoutParams(150, 150));
return i;
}

/** Returns the size (0.0f to 1.0f) of the views
* depending on the 'offset' to the center. */
public float getScale(boolean focused, int offset) {
/* Formula: 1 / (2 ^ offset) */
return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset)));
}
}





//the important AsyncTask method. running the background thread to get the images and set them to the gallery.
private class MyTask extends AsyncTask<Void, Void, Void>{


@Override
protected Void doInBackground(Void... arg0) {try {
getImages();
Log.v("MyTask", "Image 1 retreived");
getImage2();
Log.v("MyTask", "Image 2 retreived");
getImage3();
Log.v("MyTask", "Image 3 retreived");
getImage4();
Log.v("MyTask", "Image 4 retreived");
} catch (IOException e) {
Log.e("MainMenu retreive image", "Image Retreival failed");
e.printStackTrace();
}
return null;
}
@Override

protected void onPostExecute(Void notUsed){
((Gallery) findViewById(R.id.gallery))
.setAdapter(new ImageAdapter(MainMenu.this));


}

}

最佳答案

有几种方法可以做到这一点,假设来自 url 的文件名是唯一的,您可以将它们写入 SD 卡或内部存储器。例如:

File cacheDir = new File("my-cache-dir");
File[] fileList = cacheDir.listFiles();
int index = linearSearch.(fileList, uri.getFileName());

if(index != -1){
// load from file
} else {
// load from web
}

还有其他几种方法可以做到这一点,例如使用数据库或平面文件。请记住,您每次都必须为缓存的内容生成相同的缓存键。

关于android - 缓存从互联网上获取的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com