0

我正在尝试使用来自github的 universalimageloader 获取网格视图中的图像。但是,我不想从常量加载静态最终图像,而是想从服务器动态加载图像路径。所以我做了一个 jsonparser 从服务器加载信息并解析它。但我正在努力将其分配给 IMAGES 字符串数组。请建议我如何分配。我是安卓新手。

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
            }
    }

}

常量.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";
    }
}
4

2 回答 2

0

通用图像加载器

https://github.com/nostra13/Android-Universal-Image-Loader。它基于惰性列表(工作原理相同)。但它还有很多其他配置。我更喜欢使用Universal Image Loader,因为它为您提供了更多配置选项。如果下载失败,您可以显示错误图像。可以显示带圆角的图像。可以缓存在磁盘或内存上。可以压缩图像。

在您的自定义适配器构造函数中

 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].

您可以配置其他选项以满足您的需求。

与通用图像加载器一起,您可以查看持有人以实现平滑滚动和性能。http://developer.android.com/training/improving-layouts/smooth-scrolling.html

于 2013-04-05T08:18:57.747 回答
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);
于 2013-04-05T07:37:05.177 回答