繁体   English   中英

从对象URL返回位图

[英]Returning Bitmap from object URL

我想编写一个从对象URL返回位图图像的方法。 但是它给NetworkOnMainThreadException错误。

Image.java:

package gc.x.models;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;

import com.google.gson.annotations.SerializedName;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import gc.x.R;


/**
 * Created by ASUS on 4.10.2016.
 */
public class Image {


    public String albumId;
    public String id;
    public String title;
    public String url;
    public String thumbnailUrl;


    public Bitmap getBitmapFromURL() {//get bitmap of thumbnail from thumbnailurl
        try {
            URL url = new URL(this.thumbnailUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            // Log exception
            return null;
        }
    }


}

我不想简单地从url中显示位图图像,因为代码结构不同。为避免混淆,我没有共享我的所有代码。 我只想编写一个从对象的thumbnailurl获取位图的方法。 稍后,我将使用此方法。 我从http://jsonplaceholder.typicode.com/获得图像

您不能在主线程中执行此网络任务,而必须在Async任务中编写此任务。

在类中编写此代码

private class AsyncClass extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        getBitmapFromURL();
    }

    @Override
    protected void onPostExecute(String result) {
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}

并这样称呼它

new AsyncClass().execute("");

您的问题是您正在使用主线程进行网络操作...此外,我建议使用图像加载框架来实现该目标,即使用Glide ..并在一行中具有该位图。 您不需要解决mainThread ..因为Glide会为您解决这个问题。只需专注于您的代码即可。

Bitmap theBitmap = Glide.with(this).
                load("http://...."). // or url 
                asBitmap().
                into(100, 100). // Width and height
                get();

滑行: https : //github.com/bumptech/glide

您需要在后台线程中执行此操作。 请参阅我的答案以获取Android中代码文件上传到服务器的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM