gpt4 book ai didi

Android Flickr Json 缓存图片

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:13 25 4
gpt4 key购买 nike

我希望有人能帮我弄清楚如何将 Flickr Json 图像缓存到缓存中以便更快地加载和离线使用...下面的代码来自一个教程,我已经弄清楚了所有这些,但我迷失了尝试阅读/使用 Android 开发人员资源和网络上的其他示例...非常感谢解决方案并帮助完成这项工作...我是编程新手,感谢这里的知识:)

 package com.windmillagency;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;








import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

public class AndroidFlickrActivity extends BT_activity_base {



public String thisActivityName = "Flickr";

ProgressDialog progressDialog;
BackgroundThread backgroundThread;

public class FlickrImage {
String Id;
String Owner;
String Secret;
String Server;
String Farm;
String Title;

Bitmap FlickrBitmap;

FlickrImage(String _Id, String _Owner, String _Secret,
String _Server, String _Farm, String _Title){
Id = _Id;
Owner = _Owner;
Secret = _Secret;
Server = _Server;
Farm = _Farm;
Title = _Title;

FlickrBitmap = preloadBitmap();
}

private Bitmap preloadBitmap(){
Bitmap bm= null;

String FlickrPhotoPath =
"http://farm" + Farm + ".static.flickr.com/"
+ Server + "/" + Id + "_" + Secret + "_m.jpg";

URL FlickrPhotoUrl = null;

try {
FlickrPhotoUrl = new URL(FlickrPhotoPath);

HttpURLConnection httpConnection
= (HttpURLConnection) FlickrPhotoUrl.openConnection();
httpConnection.setDoInput(true);
httpConnection.connect();
InputStream inputStream = httpConnection.getInputStream();
bm = BitmapFactory.decodeStream(inputStream);

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return bm;
}

public Bitmap getBitmap(){
return FlickrBitmap;
}

}

class FlickrAdapter extends BaseAdapter{
private Context context;
private FlickrImage[] FlickrAdapterImage;;

FlickrAdapter(Context c, FlickrImage[] fImage){
context = c;
FlickrAdapterImage = fImage;
}

public int getCount() {
// TODO Auto-generated method stub
return FlickrAdapterImage.length;
}

public Object getItem(int position) {
// TODO Auto-generated method stub
return FlickrAdapterImage[position];
}

public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView image;
if (convertView == null) {
image = new ImageView(context);
image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
image.setScaleType(ImageView.ScaleType.FIT_CENTER);
image.setPadding(8, 8, 8, 8);
} else {
image = (ImageView) convertView;
}

image.setImageBitmap(FlickrAdapterImage[position].getBitmap());

return image;
}

}

FlickrImage[] myFlickrImage;

/*
* FlickrQuery = FlickrQuery_url
* + FlickrQuery_per_page
* + FlickrQuery_nojsoncallback
* + FlickrQuery_format
* + FlickrQuery_tag + q
* + FlickrQuery_key + FlickrApiKey
*/

String FlickrQuery_url = "http://api.flickr.com/myflickrURL";
String FlickrQuery_per_page = "&per_page=10";
String FlickrQuery_nojsoncallback = "&nojsoncallback=1";
String FlickrQuery_format = "&format=json";
String FlickrQuery_tag = "&tags=";
String FlickrQuery_key = "&api_key=";

// Apply your Flickr API:
// www.flickr.com/services/apps/create/apply/?
String FlickrApiKey = "xxxxxxxxxxxxxxxxxxx";


final String DEFAULT_SEARCH = "flickr";

EditText searchText;
Button searchButton;

Gallery photoBar;

Bitmap bmFlickr;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.activityName = "AndroidFlickrActivity";
BT_debugger.showIt(activityName + ":onCreate");

//reference to base layout..
LinearLayout baseView = (LinearLayout)findViewById(R.id.baseView);

//setup background colors...
BT_viewUtilities.updateBackgroundColorsForScreen(this, this.screenData);

//setup background images..
if(backgroundImageWorkerThread == null){
backgroundImageWorkerThread = new BackgroundImageWorkerThread();
backgroundImageWorkerThread.start();
}

//setup navigation bar...
LinearLayout navBar = BT_viewUtilities.getNavBarForScreen(this, this.screenData);
if(navBar != null){
baseView.addView(navBar);
}

//inflate this screens layout file...
LayoutInflater vi = (LayoutInflater)thisActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View thisScreensView = vi.inflate(R.layout.flickr, null);

//add the view to the base view...
baseView.addView(thisScreensView);

searchText = (EditText)findViewById(R.id.searchtext);
searchText.setText(DEFAULT_SEARCH);
searchButton = (Button)findViewById(R.id.searchbutton);

photoBar = (Gallery)findViewById(R.id.photobar);

searchButton.setOnClickListener(searchButtonOnClickListener);
}

private Button.OnClickListener searchButtonOnClickListener
= new Button.OnClickListener(){

public void onClick(View arg0) {
// TODO Auto-generated method stub
progressDialog = ProgressDialog.show(AndroidFlickrActivity.this,
"Progress", "Wait!");

backgroundThread = new BackgroundThread();
backgroundThread.setRunning(true);
backgroundThread.start();




}};


private String QueryFlickr(String q){

String qResult = null;

String qString =
FlickrQuery_url
+ FlickrQuery_per_page
+ FlickrQuery_nojsoncallback
+ FlickrQuery_format
+ FlickrQuery_tag + q
+ FlickrQuery_key + FlickrApiKey;

HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(qString);

try {
HttpEntity httpEntity = httpClient.execute(httpGet).getEntity();

if (httpEntity != null){
InputStream inputStream = httpEntity.getContent();
Reader in = new InputStreamReader(inputStream);
BufferedReader bufferedreader = new BufferedReader(in);
StringBuilder stringBuilder = new StringBuilder();

String stringReadLine = null;

while ((stringReadLine = bufferedreader.readLine()) != null) {
stringBuilder.append(stringReadLine + "\n");
}

qResult = stringBuilder.toString();
inputStream.close();
}

} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return qResult;
}

private FlickrImage[] ParseJSON(String json){

FlickrImage[] flickrImage = null;

bmFlickr = null;
String flickrId;
String flickrOwner;
String flickrSecret;
String flickrServer;
String flickrFarm;
String flickrTitle;

try {
JSONObject JsonObject = new JSONObject(json);
JSONObject Json_photos = JsonObject.getJSONObject("photos");
JSONArray JsonArray_photo = Json_photos.getJSONArray("photo");

flickrImage = new FlickrImage[JsonArray_photo.length()];
for (int i = 0; i < JsonArray_photo.length(); i++){
JSONObject FlickrPhoto = JsonArray_photo.getJSONObject(i);
flickrId = FlickrPhoto.getString("id");
flickrOwner = FlickrPhoto.getString("owner");
flickrSecret = FlickrPhoto.getString("secret");
flickrServer = FlickrPhoto.getString("server");
flickrFarm = FlickrPhoto.getString("farm");
flickrTitle = FlickrPhoto.getString("title");
flickrImage[i] = new FlickrImage(flickrId, flickrOwner, flickrSecret,
flickrServer, flickrFarm, flickrTitle);
}

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return flickrImage;
}

public class BackgroundThread extends Thread{
volatile boolean running = false;
int cnt;

void setRunning(boolean b){
running = b;
cnt = 10;
}

@Override
public void run() {
// TODO Auto-generated method stub
String searchQ = searchText.getText().toString();
String searchResult = QueryFlickr(searchQ);

myFlickrImage = ParseJSON(searchResult);


handler.sendMessage(handler.obtainMessage());
}
}

Handler handler = new Handler(){

@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub

progressDialog.dismiss();
photoBar.setAdapter(new FlickrAdapter(AndroidFlickrActivity.this, myFlickrImage));
Toast.makeText(AndroidFlickrActivity.this,
"Images Loaded", Toast.LENGTH_LONG).show();
}

};

}

最佳答案

我建议你看看Universal Image Loader在 github 上。

Universal Image Loader 允许您轻松地在 Android 上以列表、图库和网格格式集成异步图像加载、缓存和图像渲染。如果您想实现自己的解决方案,阅读该项目的源代码是一个很好的开始。它是由 Sergey Tarasevich 编写的并根据 BSD 3-clause 获得许可.

关于Android Flickr Json 缓存图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10327645/

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