【问题标题】:Converting finalBufferData into img url to display将finalBufferData转换成img url来显示
【发布时间】:2016-07-18 02:53:57
【问题描述】:

我正在尝试提取从要显示的 JSON 部分构造的几个图像 url。

我能够检索 JSON,然后从 JSON 构造几个 url,将其显示为屏幕上的文本 ( String )。

在 AsyncTask 结束时,我使用 Universal Image Loader 来显示单个图片,以防 JSON 包含单个图片的信息,但问题是当从 JSON 构造多个 url 时:

finalBufferData.append("http://res.cloudinary.com/CLOUD_NAME/" + fileType +
                        "/upload/v" + version + "/" + publicID + "." + format + "/n");

它只在单独的行中创建一个地址字符串(如果显示在 textView 中),但传递给 UIL 是不可接受的。

所以我不知道该怎么做,因为我试图在 listView 中以线性方式或不同方式显示图像视图,以显示多个图像,具体取决于 JSON 信息。

任何关于如何做到这一点的建议都会很棒。

我的 AsyncTask 编码它;

 public class JsonTask extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {
        HttpURLConnection connection = null;
        BufferedReader reader = null;
        try {
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();

            InputStream stream = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();

            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            String finalJson = buffer.toString();

            JSONObject parentObject = new JSONObject(finalJson);
            JSONArray parentArray = parentObject.getJSONArray("resources");

            StringBuffer finalBufferData = new StringBuffer();

            for(int i=0; i<parentArray.length(); i++) {
                JSONObject finalObject = parentArray.getJSONObject(i);

                String publicID = finalObject.getString("public_id");
                String version = finalObject.getString("version");
                String format = finalObject.getString("format");
                finalBufferData.append("http://res.cloudinary.com/CLOUD_NAME/" + fileType +
                        "/upload/v" + version + "/" + publicID + "." + format);

            }
            return finalBufferData.toString();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();


            }
            try {
                if (reader != null) {
                    reader.close();

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

            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        ImageLoader.getInstance().displayImage(result, imageViewDisplayUp);

        //imagesList.setText(result);
    }

}

}

【问题讨论】:

    标签: json android-studio android-asynctask imageview android-linearlayout


    【解决方案1】:

    通过添加另一个不在 JSON 中但从其他 JASON 字符串创建的字符串找到了解决方法。

    由于 public_id、版本和格式在从 Cloudinary 下载的 JSON 中,并且需要为要传递到 ImageLoader 的图像构建正确的地址,我找不到另一种方法来检索上传的图像 url 列表由具有特定标签到 Cloudinary 的用户,而不使用需要在程序中编写 api_secret 的管理 api,我最终做了以下事情;

    public class JsonTask extends AsyncTask<String, String, List<upImgModels> > {
    
    
    
        @Override
        protected List<upImgModels> doInBackground(String... params) {
            HttpURLConnection connection = null;
            BufferedReader reader = null;
            try {
                URL url = new URL(params[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.connect();
    
                InputStream stream = connection.getInputStream();
                reader = new BufferedReader(new InputStreamReader(stream));
    
                StringBuffer buffer = new StringBuffer();
    
                String line = "";
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
    
                String finalJson = buffer.toString();
    
                JSONObject parentObject = new JSONObject(finalJson);
                JSONArray parentArray = parentObject.getJSONArray("resources");
    
    
                List<upImgModels> upImgList = new ArrayList<>();
    
                for(int i=0; i<parentArray.length(); i++) {
                    JSONObject finalObject = parentArray.getJSONObject(i);
    
                    upImgModels upImgModels = new upImgModels();
                    upImgModels.setPublic_id(finalObject.getString("public_id"));
                    upImgModels.setVersion(finalObject.getString("version"));
                    upImgModels.setFormat(finalObject.getString("format"));
    
                    upImgModels.setAddress("http://res.cloudinary.com/we4x4/" + fileType
                            + "/upload/v" + finalObject.getString("version") + "/"
                            + finalObject.getString("public_id") + "." +
                            finalObject.getString("format"));
    
                    upImgList.add(upImgModels);
                }
                return upImgList;
    
    
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            } finally {
                if (connection != null) {
                    connection.disconnect();
    
    
                }
                try {
                    if (reader != null) {
                        reader.close();
    
                    }
                } catch (IOException e) {
                    e.printStackTrace();
    
                }
            }
            return null;
        }
    
        @Override
        protected void onPostExecute(List<upImgModels> result) {
            super.onPostExecute(result);
            upImgAdapter adapter = new upImgAdapter(getApplicationContext(), R.layout.row, result);
            listViewUpload.setAdapter(adapter);
            //imagesList.setText(result);
        }
    
    }
    
    
    public class upImgAdapter extends ArrayAdapter{
    
        public List<upImgModels> upImgModelsList;
        private int resource;
        private LayoutInflater inflater;
        public upImgAdapter(Context context, int resource, List<upImgModels> objects) {
            super(context, resource, objects);
            upImgModelsList = objects;
            this.resource = resource;
            inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent){
    
            if(convertView == null){
                convertView = inflater.inflate(R.layout.row, null);
            }
    
            ImageView imageViewDisplay;
            imageViewDisplay = (ImageView)convertView.findViewById(R.id.imageViewDisplay);
    
            ImageLoader.getInstance().displayImage(upImgModelsList.get(position).getAddress(), imageViewDisplay);
    
            return convertView;
        }
    }
    

    }

    如果可能的话,我希望有人能提出更好的方法来做到这一点,我相信情况就是如此。

    【讨论】:

      猜你喜欢
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多