gpt4 book ai didi

java - 为什么我的图像没有下载到 ImageViews 中?

转载 作者:行者123 更新时间:2023-11-30 02:46:17 25 4
gpt4 key购买 nike

我是原生 Android 开发的新手。我的应用目前正在做什么:

  1. 从我们的服务器下载图像 url 的 JSON

  2. 为每个图像添加一个 ImageView 到一个 ListView

我已经获得了 JSON,现在正致力于使用 ImageAdapter(扩展 BaseAdapter)来填充 ListView,但我遇到了一个错误:

  • 在我的 OpenHttpGETConnection 函数中创建 InputStream 期间,我收到 println needs a message

这是我的代码(按从高到低的顺序删除了不必要的代码):

  1. 加载 JSON 后,我的 onPostExecute 代码将运行以启动适配器:

    private class DownloadImagesTextTask extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... urls){
    return getImages(urls[0]);
    }

    @Override
    protected void onPostExecute(String result){
    JSONArray images = null;
    images = new JSONArray(result);

    // TURN images into array of imageviews
    ListView listView = (ListView) findViewById(R.id.list);
    @here----> listView.setAdapter(new ImageAdapter(getBaseContext(), images));
    Log.d("DownloadTextTask", images.toString());
    }
    }
  2. 这是我的 ImageAdapter 代码:

    public class ImageAdapter extends BaseAdapter {
    private Context context;
    private JSONArray images;
    public ImageAdapter(Context c, JSONArray i){
    context = c;
    images = i;
    }
    // returns an imageview view
    public View getView(int position, View convertView, ViewGroup parent){
    ImageView imageView = new ImageView(context);
    try {
    String url = "http://www.example.com/" + images.get(position);
    @here----> imageView.setImageBitmap(getImageBitmap(url));
    } catch (Exception e){
    Log.d("LoadImage", e.getLocalizedMessage());
    }
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);

    return imageView;
    }
    }
  3. 这是我的 getImageBitmap 函数:

    private Bitmap getImageBitmap(String url){
    Bitmap bitmap = null;
    InputStream in = null;
    try {

    @here----> in = OpenHttpGETConnection(url);

    } catch (Exception e) {

    @i_get
    @this ----> Log.wtf("OpenGET", e.getMessage() + ": " + url );
    @error

    }
    bitmap = BitmapFactory.decodeStream(in);
    in.close();

    return bitmap;
    }
  4. 最后,这是我的 OpenHttpGETConnection 函数:

    public static InputStream OpenHttpGETConnection(String url){
    InputStream inputStream = null;
    HttpClient httpClient = null;
    HttpResponse httpResponse = null;


    httpClient = new DefaultHttpClient();
    httpResponse = httpClient.execute(new HttpGet(url));
    inputStream = httpResponse.getEntity().getContent();

    return inputStream;
    }
  5. 这是相关的 LogCat 行:(发生在通过 JSON 文件传输的 3 张图像上)

    A/OpenGET﹕ println needs a message: http://www.example.com/image1.jpg

奇怪的是,我在加载 JSON 数据时使用相同的 OpenHttpGETConnection,所以我很确定它返回了正确的 InputStream 对象。将它用于文本数据与二进制数据 (jpg) 时是否有一些注意事项?

提前致谢!

最佳答案

首先在适配器中,在 getView() 方法中,您没有回收项目。查看 ViewHolder 模式 ( http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html )。然后,getImageBitmap() 好像是在同一个线程上执行的,不知道为什么不崩溃。我猜你在那里下载了实际的图像。它应该异步完成,您应该发送 ImageView 的引用,当下载完成后您应该将它加载到其中。当然,当你将 bitmap 放在 ImageView 中时,你必须关心屏幕上是否有良好的 ImageView(因为它可能已被回收)。要摆脱所有这些顾虑,您只需使用 Picasso library ( http://square.github.io/picasso/ ),它会为您完成这一切。

关于java - 为什么我的图像没有下载到 ImageViews 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24950315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com