0

我有一个 JSON URL::http://54.218.73.244:7006/DescriptionSortedRating/

JSON结构::

"restaurants": [
    {
      "restaurantID": 4,
      "restaurantNAME": "CopperChimney1",
      "restaurantIMAGE": "MarkBoulevard1.jpg",
      "restaurantDISTANCE": 15,
      "restaurantTYPE": "Indian",
      "restaurantRATING": 1,
      "restaurantPrice": 11,
      "restaurantTime": "9am t0 8pm"
    },

RestaurantDescPhotos.java

public class RestaurantDescPhotos extends Activity {
    // url to make request

    private static String url = "http://54.218.73.244:7006/DescriptionSortedRating/";

    String restaurant_name, cc_res;
    ProgressDialog progressDialog;
    JSONObject jsonObject;
    JSONArray first_array;
    TextView textView;
    TextView text;

    private SparseArray<String> imagesMap = new SparseArray<String>();

    ArrayList<HashMap<String, String>> list_of_images = new ArrayList<HashMap<String, String>>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.restaurant_desc_photos);

        progressDialog = new ProgressDialog(RestaurantDescPhotos.this);
        new ParsingAsync().execute();
    }

    private class ParsingAsync extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = ProgressDialog.show(RestaurantDescPhotos.this, "",
                    "Please Wait", true, false);

        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            String _response = null;
            try {
                HttpClient httpclient = new DefaultHttpClient();
                httpclient.getParams().setParameter(
                        CoreProtocolPNames.PROTOCOL_VERSION,
                        HttpVersion.HTTP_1_1);



                HttpGet request = new HttpGet(url);
                HttpResponse response = httpclient.execute(request);
                HttpEntity resEntity = response.getEntity();
                _response = EntityUtils.toString(resEntity);

                jsonObject = new JSONObject(_response);
                first_array = jsonObject.getJSONArray("restaurants");

            } catch (JSONException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;

        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            progressDialog.dismiss();

            // TextView timedisplay=(TextView)
            // findViewById(R.id.RestaurantTimeID);

            for (int i = 0; i < first_array.length(); i++) {
                try {
                    JSONObject detail_obj = first_array.getJSONObject(i);

                    HashMap<String, String> map_for_images = new HashMap<String, String>();

                    int id = detail_obj.getInt("_id");
                    String IMAGES = detail_obj.getString("restaurantIMAGE");

                    map_for_images.put("Starters", IMAGES);

                    list_of_images.add(map_for_images);


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


            ImageView imageView = (ImageView) findViewById(R.id.DISP_IMG);


        }
    }
}

RestaurantDescPhotos.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TableRow
        android:id="@+id/tableRow6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="2sp" >
    </TableRow>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp" >
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp" >
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TableRow
            android:id="@+id/DescriptionTitleRow"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="2sp" >

            <HorizontalScrollView
                android:id="@+id/horizontalScrollView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical" >

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal" >

                        <ImageView
                            android:id="@+id/DISP_IMG"
                            android:layout_width="167dp"
                            android:layout_height="167dp"
                            android:src="@drawable/ic_launcher" />
                    </LinearLayout>
                </LinearLayout>
            </HorizontalScrollView>
        </TableRow>
    </LinearLayout>

</LinearLayout>

ImageLoader.java

public class ImageLoader {

    MemoryCache memoryCache = new MemoryCache();
    FileCache fileCache;
    private Map<ImageView, String> imageViews = Collections
            .synchronizedMap(new WeakHashMap<ImageView, String>());
    ExecutorService executorService;
    // Handler to display images in UI thread
    Handler handler = new Handler();

    public ImageLoader(Context context) {
        fileCache = new FileCache(context);
        executorService = Executors.newFixedThreadPool(5);
    }

    final int stub_id = R.drawable.temp_img;

    public void DisplayImage(String url, ImageView imageView) {
        imageViews.put(imageView, url);
        Bitmap bitmap = memoryCache.get(url);
        if (bitmap != null)
            imageView.setImageBitmap(bitmap);
        else {
            queuePhoto(url, imageView);
            imageView.setImageResource(stub_id);
        }
    }

    private void queuePhoto(String url, ImageView imageView) {
        PhotoToLoad p = new PhotoToLoad(url, imageView);
        executorService.submit(new PhotosLoader(p));
    }

    private Bitmap getBitmap(String url) {
        File f = fileCache.getFile(url);

        Bitmap b = decodeFile(f);
        if (b != null)
            return b;

        // Download Images from the Internet
        try {
            Bitmap bitmap = null;
            URL imageUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) imageUrl
                    .openConnection();
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);
            conn.setInstanceFollowRedirects(true);
            InputStream is = conn.getInputStream();
            OutputStream os = new FileOutputStream(f);
            Utils.CopyStream(is, os);
            os.close();
            conn.disconnect();
            bitmap = decodeFile(f);
            return bitmap;
        } catch (Throwable ex) {
            ex.printStackTrace();
            if (ex instanceof OutOfMemoryError)
                memoryCache.clear();
            return null;
        }
    }

    // Decodes image and scales it to reduce memory consumption
    private Bitmap decodeFile(File f) {
        try {
            // Decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            FileInputStream stream1 = new FileInputStream(f);
            BitmapFactory.decodeStream(stream1, null, o);
            stream1.close();

            // Find the correct scale value. It should be the power of 2.
            // Recommended Size 512
            final int REQUIRED_SIZE = 70;
            int width_tmp = o.outWidth, height_tmp = o.outHeight;
            int scale = 1;
            while (true) {
                if (width_tmp / 2 < REQUIRED_SIZE
                        || height_tmp / 2 < REQUIRED_SIZE)
                    break;
                width_tmp /= 2;
                height_tmp /= 2;
                scale *= 2;
            }

            // Decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            FileInputStream stream2 = new FileInputStream(f);
            Bitmap bitmap = BitmapFactory.decodeStream(stream2, null, o2);
            stream2.close();
            return bitmap;
        } catch (FileNotFoundException e) {
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    // Task for the queue
    private class PhotoToLoad {
        public String url;
        public ImageView imageView;

        public PhotoToLoad(String u, ImageView i) {
            url = u;
            imageView = i;
        }
    }

    class PhotosLoader implements Runnable {
        PhotoToLoad photoToLoad;

        PhotosLoader(PhotoToLoad photoToLoad) {
            this.photoToLoad = photoToLoad;
        }

        @Override
        public void run() {
            try {
                if (imageViewReused(photoToLoad))
                    return;
                Bitmap bmp = getBitmap(photoToLoad.url);
                memoryCache.put(photoToLoad.url, bmp);
                if (imageViewReused(photoToLoad))
                    return;
                BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad);
                handler.post(bd);
            } catch (Throwable th) {
                th.printStackTrace();
            }
        }
    }

    boolean imageViewReused(PhotoToLoad photoToLoad) {
        String tag = imageViews.get(photoToLoad.imageView);
        if (tag == null || !tag.equals(photoToLoad.url))
            return true;
        return false;
    }

    // Used to display bitmap in the UI thread
    class BitmapDisplayer implements Runnable {
        Bitmap bitmap;
        PhotoToLoad photoToLoad;

        public BitmapDisplayer(Bitmap b, PhotoToLoad p) {
            bitmap = b;
            photoToLoad = p;
        }

        public void run() {
            if (imageViewReused(photoToLoad))
                return;
            if (bitmap != null)
                photoToLoad.imageView.setImageBitmap(bitmap);
            else
                photoToLoad.imageView.setImageResource(stub_id);
        }
    }

    public void clearCache() {
        memoryCache.clear();
        fileCache.clear();
    }

}
  • 我有一个 XML 格式的图像视图
  • 如何为 JSONURL 设置图像视图
  • 我已经编写了课程的某些部分,但试图知道如何设置图像视图

有任何想法吗

4

3 回答 3

0

尝试这个

  1. 从这里下载 AndroidQuery jar 。

  2. 将此 jar 放入您的 libs 文件夹,然后右键单击 jar 和 Build Path -> Add to bulid path

  3. 如何使用看这个例子

    AQuery androidQuery = new AQuery(this); // make AndroidQuery object 
    
    androidQuery.id(yourImageView).image(imageUrl, isCacheUrlImageOnMemery, isCacheUrlImageOnFile); //  use this way 
    
    isCacheUrlImageOnMemery - if true then given url image cahce on memery so after word android query check is given url image cahce on either memery or file then it take from cahce other wise it try to getting from url 
    
    isCacheUrlImageOnFile - same like isCacheUrlImageOnMemery but first of all android query check on memery then file in case if we have not much of memery then we cahce on file tht y two option are available.
    
于 2013-09-30T04:04:08.853 回答
0

您可以使用 ImageLoader 设置您的图像...

全局创建 ImageLoader 的实例,如..

  ImageLoader imageLoader;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
           ......
           imageLoader=new  ImageLoader(ClassName.this);


            ImageView imageView = (ImageView) findViewById(R.id.DISP_IMG);
           ......
            imageLoader.DisplayImage(YourImageURLHere,imageView);
于 2013-09-30T04:16:50.753 回答
0

您可以使用此库从 URL 加载图像: https ://github.com/shaunidiot/AndroidTutorial/tree/master/ionimagetest/bin

请参阅本教程视频,了解如何操作: http ://www.youtube.com/watch?v=zwR44n54-bk

该库将执行所有 asyncTask 过程来加载和查看图像,如果 URL 中的图像被删除或不可用,您还可以使用占位符图像

于 2013-09-30T04:28:26.860 回答