Android 5.0:Android.os.NetworkOnMainThread尝试获取位图对象时出现异常

Android 5.0:Android.os.NetworkOnMainThread尝试获取位图对象时出现异常,android,android-asynctask,Android,Android Asynctask,当我编码我的android项目时,我需要加载一个带有URL的位图对象。 运行以下代码时引发异常: Bitmap bm = GetLoginUserInfoUtil.getBitmap(object.getString("profile_image_url")); 例外情况: 12-30 21:01:14.440: W/System.err(6025): android.os.NetworkOnMainThreadException 12-30 21:01:14.440: W/System.er

当我编码我的android项目时,我需要加载一个带有URL的位图对象。 运行以下代码时引发异常:

Bitmap bm = GetLoginUserInfoUtil.getBitmap(object.getString("profile_image_url"));
例外情况:

12-30 21:01:14.440: W/System.err(6025): android.os.NetworkOnMainThreadException
12-30 21:01:14.440: W/System.err(6025): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
以下是我的getBitmap方法:

public static Bitmap getBitmap(String biturl) {

    Bitmap bitmap=null;

    try {
        URL url = new URL(biturl);

        URLConnection conn = url.openConnection();
        InputStream in = conn.getInputStream();
        bitmap = BitmapFactory.decodeStream(new BufferedInputStream(in));

    } 
    catch (Exception e) {

        e.printStackTrace();
    }
    return bitmap;


}
我发现了一个关于android.os.NetworkOnMainThreadException的类似问题,最推荐的解决方案是使用AsyncTask

如何在我的类GetLoginUserInfoUtil中实现AsyncTask

编辑: 这是我加载位图文件的原始方法:

public static void reqUserInfo(final Oauth2AccessToken accessToken, long uid) {

    user = new LoginUserInfo();
    UsersAPI userapi = new UsersAPI(accessToken);

    userapi.show(uid, new RequestListener() {

        public void onComplete(String arg0) {

            JSONObject object;

            try {
                object = new JSONObject(arg0);

                Bitmap bm = GetLoginUserInfoUtil.getBitmap(object.getString("profile_image_url"));
                GetLoginUserInfoUtil.user.setUserIcon(bm);
                GetLoginUserInfoUtil.user.setIsDefault("0");
                GetLoginUserInfoUtil.user.setToken(accessToken.getToken());
                GetLoginUserInfoUtil.user.setUserName(object.getString("screen_name"));

            } 
            catch (JSONException e) {

                e.printStackTrace();
            }


        }
现在,我在类中添加了建议的异步任务:

private class GetBitmapTask extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected Bitmap doInBackground(String... params) {
        return GetLoginUserInfoUtil.getBitmap(params[0]);
    }

    @Override
    protected void onPostExecute(Bitmap result) {

        GetLoginUserInfoUtil.user.setUserIcon(result);
    }

}
但我有一个错误:

No enclosing instance of type GetLoginUserInfoUtil is accessible. Must qualify the allocation with an enclosing instance of type 
GetLoginUserInfoUtil (e.g. x.new A() where x is an instance of GetLoginUserInfoUtil).

包括这个。或者,更好的方法是使用许多异步加载图像的第三方库中的任何一个,例如或。与此主题相关的问题太多了。看到这一点,这本身将不起作用,因为它与程序流不同步(无法以原始方式“返回”位图)。这也是我的想法,我需要在获取对象后才开始获取位图,并从对象解释url。如何从这里开始异步任务?
No enclosing instance of type GetLoginUserInfoUtil is accessible. Must qualify the allocation with an enclosing instance of type 
GetLoginUserInfoUtil (e.g. x.new A() where x is an instance of GetLoginUserInfoUtil).
private class GetBitmapTask extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected Bitmap doInBackground(String... params) {
        return GetLoginUserInfoUtil.getBitmap(params[0]);
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        bm = result;
    }

}
new GetBitmapTask(object.getString("profile_image_url")).execute();