【问题标题】:Click on imageView crashes if image not loaded from url [duplicate]如果未从 url 加载图像,则单击 imageView 崩溃 [重复]
【发布时间】:2017-12-14 10:12:39
【问题描述】:

我正在使用无尽的回收器视图来显示多个帖子。但是如果我的网速很慢,并且当我点击 imageview 时图像没有按时加载,它会使应用程序崩溃。 我通过意图将 url 从活动发送到另一个。

这里是代码

RecyclerAdapter.java

 holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
  String icon = jsonData.get((position)).getImg();
  Intent intent = new Intent(context, Detail.class);
  intent.putExtra("app_icon", icon);
  }
  context.startActivity(intent);

Detail.java

     detail_icon = (ImageView) findViewById(R.id.detail_icon);
    String appicon = getIntent().getStringExtra("app_icon");
      try {
            detail_icon.setImageBitmap(BitmapFactory.decodeStream((InputStream) new URL(appicon).getContent()));
    }catch (IOException e2) {
        e2.printStackTrace();
    }

未加载图像时在此行崩溃,我单击 imageview。

   detail_icon.setImageBitmap(BitmapFactory.decodeStream((InputStream) new URL(appicon).getContent()));

Logcat

        Process: com.example.lenovo.connectiontest, PID: 26525
                                                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lenovo.connectiontest/com.example.lenovo.connectiontest.Activity.Detail}: android.os.NetworkOnMainThreadException

   at com.example.lenovo.connectiontest.Activity.Detail.onCreate(Detail.java:233)

【问题讨论】:

  • 在单独的线程上下载该图像。下载图像后,将其设置为图像视图
  • 使用 Glide 或 Picasso 加载图片
  • 使用 glidePicasso 从 url 加载图片
  • 已经在使用毕加索@Prem

标签: java android android-intent imageview picasso


【解决方案1】:

是的,它解决了我的问题

  Thread thread = new Thread(new Runnable() {

@Override
public void run() {
    try  {
        //Your code goes here
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  });

  thread.start();

【讨论】:

    【解决方案2】:

    为什么不使用 Glide? 将此添加到您的应用级 Gradle 文件中:

     

    // Glide image library
    
        compile 'com.github.bumptech.glide:glide:3.7.0'
    

    然后在任何活动中使用提供的 URL,图像被缓存,不需要再次下载(在我的情况下!) 然后将其添加到您的活动中:

    Glide.with(this).load(urlProfileImg)
    
                    .crossFade()
    
                    .thumbnail(0.5f)
    
                    .bitmapTransform(new CircleTransform(this))
    
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
    
                    .into(imgProfile);
    

    或者也许尝试使用 Picasso - 它有一个超类,您可以在加载图像时覆盖它:

    Picasso.with(context).load(url).into(target, new Callback(){ @Override public void onSuccess() { } @Override public void onError() { } });
    

    抱歉,代码格式错误! 我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多