我正在尝试使用github中的universalimageloader在网格视图中获取图像。但是我没有从常量加载静态最终图像,而是想从服务器动态加载图像路径。所以我创建了一个jsonparser来从服务器加载信息并解析它。但我正在努力将其分配给IMAGES字符串数组。请建议我如何分配。我是android的新手。
ImageConstants.java
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
public class ImageConstant {
public static String[] IMAGE1;
private static String[] constants;
public static String url = "http://ensign119.com/assets/image11.php";
// JSON Node names
protected static final String TAG_PRODUCTS = "image_path";
protected static final String TAG_CID = "file_id";
public static final String TAG_NAME = "file_name";
// contacts JSONArray
JSONArray products = null;
public String[] ImageConstant() {
// TODO Auto-generated constructor stub
new Message().execute(url);
for(int i=0; i<IMAGE1.length;i++){
constants[i] = IMAGE1[i];
}
for(String name:constants){
Log.d("new path", name);
}
return constants;
}
class Message extends AsyncTask<String, Integer, ArrayList<HashMap<String, String>> > {
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
// ProgressDialog progress = new ProgressDialog(Path.this);
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
@Override
protected ArrayList<HashMap<String, String>> doInBackground(String... params) {
Log.d("doInBackgound","backgound is running");
Log.d("json string ", jParser.getJSONFromUrl(url).toString());
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);
Log.d("path_parsing", "before parsing");
try {
// Getting Array of Contacts
products = json.getJSONArray(TAG_PRODUCTS);
// looping through All Contacts
for(int i = products.length()-1; i >=0; i--){
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String cid = c.getString(TAG_CID).toString();
String name = c.getString(TAG_NAME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_CID, cid);
map.put(TAG_NAME, name);
// adding HashList to ArrayList
mylist.add(map);
Log.d("mylist_value", mylist.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("path_parsing", "after parsing");
return mylist;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
// if(progress.isShowing()){
// progress.dismiss();
// }
IMAGE1 = new String[result.size()];
for(int i=0; i<result.size(); i++){
IMAGE1[i] = result.get(i).get("file_name");
}
for(String path: IMAGE1){
Log.d("path", path.toString());
}
Log.d("postExecute","Postexecute is running");
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
}
}
}
Constants.java
public final class Constants {
public static final String[] IMAGES = new String[] {
"http://wrong.site.com/corruptedLink", // Wrong link
};
private Constants() {
}
public static class Config {
public static final boolean DEVELOPER_MODE = false;
}
public static class Extra {
public static final String IMAGES = "com.nostra13.example.universalimageloader.IMAGES";
public static final String IMAGE_POSITION = "com.nostra13.example.universalimageloader.IMAGE_POSITION";
}
}
答案 0 :(得分:0)
Try this,
https://github.com/thest1/LazyList
In GridView Adapter, add this code in your getView() method
ImageLoader imageLoader = new Imageloader(MainActivity.this);
imgLoader.DisplayImage(YOUR IMAGE PATH, YOUR IMAGEVIEW);
答案 1 :(得分:0)
通用图片加载器
https://github.com/nostra13/Android-Universal-Image-Loader。它基于Lazy List(基于相同的原理)。但它有很多其他配置。我更喜欢使用通用图像加载器因为它为您提供了更多配置选项。如果下载失败,您可以显示错误图像。可以显示带圆角的图像。可以缓存在光盘或内存上。可压缩图像。
在自定义适配器构造函数
中 File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder");
// Get singletone instance of ImageLoader
imageLoader = ImageLoader.getInstance();
// Create configuration for ImageLoader (all options are optional)
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
// You can pass your own memory cache implementation
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())
.enableLogging()
.build();
// Initialize ImageLoader with created configuration. Do it once.
imageLoader.init(config);
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();
在你的getView()
中 ImageView image=(ImageView)vi.findViewById(R.id.imageview);
imageLoader.displayImage(imageurl, image,options);
//provide imageurl, imageview and options
//if constant is an array containing urls
//instead of imageurl use constants[position].
您可以配置其他选项以满足您的需求。
与Universal Image Loader一起,您可以查看支架以实现平滑滚动和性能。 http://developer.android.com/training/improving-layouts/smooth-scrolling.html