Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android中JSONString中存储的URL加载ImageView中的图像_Android_Json_Imageview - Fatal编程技术网

从Android中JSONString中存储的URL加载ImageView中的图像

从Android中JSONString中存储的URL加载ImageView中的图像,android,json,imageview,Android,Json,Imageview,我有一个JSON字符串,比如一个名字和一个Url。我需要将名称提取到文本视图中,并在图像视图中提取和显示图像。 下面是上述场景的代码 public static final String JSON_STRING="{\"WebImages\":{\"Imagename\":\"image_name\",\"imageurl\":http://www.example.com/image/example.png}}"; 我需要在我创建的TextView中显示名称,然后从该url获取图像并显示在

我有一个
JSON
字符串,比如一个名字和一个Url。我需要将名称提取到
文本视图
中,并在
图像视图
中提取和显示图像。 下面是上述场景的代码

 public static final String JSON_STRING="{\"WebImages\":{\"Imagename\":\"image_name\",\"imageurl\":http://www.example.com/image/example.png}}"; 

我需要在我创建的
TextView
中显示名称,然后从该url获取图像并显示在
Imageview

中。您可以使用
GSON
库将json解析为普通Java对象,然后使用该对象填充TextView和Imageview。如果不想使用外部库,可以使用如下JSON类:

JSONObject object = new JSONObject("your strnig");
JSONObject webimages = object.getJSONObject("WebImages");
String imageName = webimages.getString("image_name")
String imageUrl = webimages.getString("imageurl")

使用Universal Image Loader以非常快速和平滑的方式加载图像

首先使用Gson解析Json并将url作为字符串获取,然后您可以使用UniversalImageLoader库(它进行异步图像下载,非常易于使用)


您可以像这样提取图像名称和url

 public static final String JSON_STRING="{\"WebImages\":{\"Imagename\":\"image_name\",\"imageurl\":http://www.example.com/image/example.png}}"; 
JSONObject jsonObject = new JSONObject(JSON_STRING);
JSONObject webImages = jsonObject.getJSONObject("WebImages");
String imageName = webImages.getString("Imagename");
String imageUrl = webImages.getString("imageurl");
现在,您有了imageName和imageUrl。您可以通过执行类似于
myTextView.setText(imageName)
的操作轻松设置文本。要将图像加载到ImageView中,我建议使用库。它非常容易使用。您只需要一行代码,如下所示

Picasso.with(context).load(imageUrl).into(imageView);

你可以这样做

         public static final String JSON_STRING="{"WebImages":{"Imagename":"image_name","imageurl":http://www.example.com/image/example.png}}";
    private ImageLoader _ImageLoader;

                    try {
            JSONObject _jObj = new JSONObject(JSON_STRING);
            JSONObject _jSubObj = _jObj .getJSONObject("WebImages");
        String _imageName= _jSubObj.getString("Imagename");
YOUR_TEXTVIEW.setText(_imageName);
        String _imageURL= _jSubObj.getString("imageurl");
      _ImageLoader = new ImageLoader(CURRENT_ACTIVITY.this);
       _ImageLoader.DisplayImage(_imageURL,
                        R.drawable.ic_launcher, YOUR_IMAGEVIEW);
                } catch (JSONException e) {
                                        // TODO Auto-generated catch block

                                        e.printStackTrace();
                                    }


    public class ImageLoader {

        MemoryCache memoryCache=new MemoryCache();
        FileCache fileCache;
        private Map<ImageView, String>     imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
        ExecutorService executorService; 

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

        int stub_id = R.drawable.ic_launcher;
        public void DisplayImage(String url, int loader, ImageView imageView)
        {
            try {

                stub_id = loader;
                imageViews.put(imageView, url);
                Bitmap bitmap=memoryCache.get(url);
                if(bitmap!=null)
                    imageView.setImageBitmap(bitmap);
                else
                {
                    queuePhoto(url, imageView);

                    imageView.setImageResource(loader);


                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

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

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

            //from SD cache
            Bitmap b = decodeFile(f);
            if(b!=null)
                return b;

            //from web
            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();
                bitmap = decodeFile(f);
                return bitmap;
            } catch (Exception ex){
                ex.printStackTrace();
                return null;
            }

        }

        public Bitmap getFacebookImage(String userId) {
            // TODO Auto-generated method stub
            Bitmap bitmap = null;

            try {

            HttpGet httpRequest = new HttpGet(
            URI.create(userId));
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = (HttpResponse) httpclient
            .execute(httpRequest);
            HttpEntity entity = response.getEntity();
            BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(
            entity);
            bitmap = BitmapFactory
            .decodeStream(bufHttpEntity
            .getContent());
            httpRequest.abort();

            } catch (Exception e) {
            e.printStackTrace();
            }
            return bitmap;
            }

        //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;
                BitmapFactory.decodeStream(new FileInputStream(f),null,o);

                //Find the correct scale value. It should be the power of 2.
            //  final int REQUIRED_SIZE=200;
            //  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=1;
                return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);

            } catch (FileNotFoundException e) {

            }catch (Exception 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() {
                if(imageViewReused(photoToLoad))
                    return;
                Bitmap bmp=getBitmap(photoToLoad.url);
                memoryCache.put(photoToLoad.url, bmp);
                if(imageViewReused(photoToLoad))
                    return;
                BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad);
                Activity a=(Activity)photoToLoad.imageView.getContext();
                a.runOnUiThread(bd);
            }
        }

        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();
        }

    }
public static final String JSON_String=“{”WebImages:{”Imagename:“image_name”,“imageurl”:http://www.example.com/image/example.png}}";
私有ImageLoader _ImageLoader;
试一试{
JSONObject_jObj=新的JSONObject(JSON_字符串);
JSONObject _jSubObj=_jObj.getJSONObject(“WebImages”);
字符串_imageName=_jSubObj.getString(“imageName”);
您的_TEXTVIEW.setText(_imageName);
字符串_imageURL=_jSubObj.getString(“imageURL”);
_ImageLoader=新的ImageLoader(当前_活动。此);
_ImageLoader.DisplayImage(\u imageURL,
R.drawable.ic_启动器,您的_图像视图);
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
公共类图像加载器{
MemoryCache MemoryCache=新的MemoryCache();
文件缓存文件缓存;
private Map ImageView=Collections.synchronizedMap(新的WeakHashMap());
执行服务执行服务;
公共图像加载器(上下文){
fileCache=新的fileCache(上下文);
executorService=Executors.newFixedThreadPool(5);
}
int stub_id=R.drawable.ic_启动器;
public void DisplayImage(字符串url、整型加载器、ImageView)
{
试一试{
存根id=装载机;
put(imageView,url);
位图位图=memoryCache.get(url);
if(位图!=null)
设置图像位图(位图);
其他的
{
队列照片(url、imageView);
setImageResource(加载程序);
}
}捕获(例外e){
e、 printStackTrace();
}
}
私有void队列照片(字符串url,ImageView)
{
PhotoToLoad p=新的PhotoToLoad(url,imageView);
executorService.submit(新的PhotoLoader(p));
}
公共位图getBitmap(字符串url)
{
文件f=fileCache.getFile(url);
//从SD缓存
位图b=解码文件(f);
如果(b!=null)
返回b;
//从网络
试一试{
位图=空;
URL imageUrl=新URL(URL);
HttpURLConnection conn=(HttpURLConnection)imageUrl.openConnection();
连接设置连接超时(30000);
连接设置读取超时(30000);
conn.setInstanceFollowRedirects(真);
InputStream is=conn.getInputStream();
OutputStream os=新文件OutputStream(f);
Utils.CopyStream(is,os);
os.close();
位图=解码文件(f);
返回位图;
}捕获(例外情况除外){
例如printStackTrace();
返回null;
}
}
公共位图getFacebookImage(字符串用户ID){
//TODO自动生成的方法存根
位图=空;
试一试{
HttpGet httpRequest=新的HttpGet(
create(userId));
HttpClient HttpClient=新的DefaultHttpClient();
HttpResponse响应=(HttpResponse)httpclient
.执行(httpRequest);
HttpEntity=response.getEntity();
BufferedHttpEntity bufHttpEntity=新BufferedHttpEntity(
实体);
位图=位图工厂
.decodeStream(bufHttpEntity
.getContent());
httpRequest.abort();
}捕获(例外e){
e、 printStackTrace();
}
返回位图;
}
//对图像进行解码和缩放以减少内存消耗
私有位图解码文件(文件f){
试一试{
//解码图像大小
BitmapFactory.Options o=新的BitmapFactory.Options();
o、 inJustDecodeBounds=true;
解码流(新的FileInputStream(f),null,o);
//找到正确的刻度值。它应该是2的幂。
//所需的最终int_尺寸=200;
//内部宽度=o.向外宽度,高度=o.向外高度;
//int标度=1;
//while(true){

//如果(width_tmp/2any method without GSON?请尝试{JSONObject emp=(new JSONObject(JSON_STRING)).getJSONObject(“WebImages”);STRING ImageName=emp.getString(“ImageName”);text1.setText(ImageName
         public static final String JSON_STRING="{"WebImages":{"Imagename":"image_name","imageurl":http://www.example.com/image/example.png}}";
    private ImageLoader _ImageLoader;

                    try {
            JSONObject _jObj = new JSONObject(JSON_STRING);
            JSONObject _jSubObj = _jObj .getJSONObject("WebImages");
        String _imageName= _jSubObj.getString("Imagename");
YOUR_TEXTVIEW.setText(_imageName);
        String _imageURL= _jSubObj.getString("imageurl");
      _ImageLoader = new ImageLoader(CURRENT_ACTIVITY.this);
       _ImageLoader.DisplayImage(_imageURL,
                        R.drawable.ic_launcher, YOUR_IMAGEVIEW);
                } catch (JSONException e) {
                                        // TODO Auto-generated catch block

                                        e.printStackTrace();
                                    }


    public class ImageLoader {

        MemoryCache memoryCache=new MemoryCache();
        FileCache fileCache;
        private Map<ImageView, String>     imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
        ExecutorService executorService; 

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

        int stub_id = R.drawable.ic_launcher;
        public void DisplayImage(String url, int loader, ImageView imageView)
        {
            try {

                stub_id = loader;
                imageViews.put(imageView, url);
                Bitmap bitmap=memoryCache.get(url);
                if(bitmap!=null)
                    imageView.setImageBitmap(bitmap);
                else
                {
                    queuePhoto(url, imageView);

                    imageView.setImageResource(loader);


                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

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

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

            //from SD cache
            Bitmap b = decodeFile(f);
            if(b!=null)
                return b;

            //from web
            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();
                bitmap = decodeFile(f);
                return bitmap;
            } catch (Exception ex){
                ex.printStackTrace();
                return null;
            }

        }

        public Bitmap getFacebookImage(String userId) {
            // TODO Auto-generated method stub
            Bitmap bitmap = null;

            try {

            HttpGet httpRequest = new HttpGet(
            URI.create(userId));
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = (HttpResponse) httpclient
            .execute(httpRequest);
            HttpEntity entity = response.getEntity();
            BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(
            entity);
            bitmap = BitmapFactory
            .decodeStream(bufHttpEntity
            .getContent());
            httpRequest.abort();

            } catch (Exception e) {
            e.printStackTrace();
            }
            return bitmap;
            }

        //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;
                BitmapFactory.decodeStream(new FileInputStream(f),null,o);

                //Find the correct scale value. It should be the power of 2.
            //  final int REQUIRED_SIZE=200;
            //  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=1;
                return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);

            } catch (FileNotFoundException e) {

            }catch (Exception 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() {
                if(imageViewReused(photoToLoad))
                    return;
                Bitmap bmp=getBitmap(photoToLoad.url);
                memoryCache.put(photoToLoad.url, bmp);
                if(imageViewReused(photoToLoad))
                    return;
                BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad);
                Activity a=(Activity)photoToLoad.imageView.getContext();
                a.runOnUiThread(bd);
            }
        }

        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();
        }

    }