运行之后界面什么都没显示,我DeBug发现他方法里放回的bp值为空,写的时候发现不能直接返回bitmap,他会报错,说要加final,然后加了还是有错,波浪线。。然后想用全局变量来接受他来返回也不行。。package com.example.helloworld.AppTest;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.ListView;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;import com.example.helloworld.R;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class AppTest_Main extends AppCompatActivity {
    private List<HashMap<String,Object>> list=new ArrayList<>();
    private ListView lv;
    private Bitmap bp;    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.apptest_main);        lv=findViewById(R.id.lv);        HashMap<String,Object> map=new HashMap<>();
        Bitmap bitmap=loading("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1573652524957&di=bcc7c99a99cd075ed1846be02f3aa636&imgtype=0&src=http%3A%2F%2Fimage2.sina.com.cn%2Fent%2Fd%2F2005-06-21%2FU105P28T3D758541F326DT20050621155848.jpg");
        map.put("head",bitmap);
        list.add(map);        AppTest_BaseAdapter adapter=new AppTest_BaseAdapter(this,list);        lv.setAdapter(adapter);    }
    public Bitmap loading(String imageurl){
        File externalFilesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        final File saveFile = new File(externalFilesDir,System.currentTimeMillis()+".png");
        new Thread(new Runnable() {
            FileOutputStream fos = null;
            InputStream is = null;
            HttpURLConnection conn = null;
            Bitmap bitmap;
            @Override
            public void run() {
                try {
                    fos = new FileOutputStream(saveFile);
                    URL url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1573652524957&di=bcc7c99a99cd075ed1846be02f3aa636&imgtype=0&src=http%3A%2F%2Fimage2.sina.com.cn%2Fent%2Fd%2F2005-06-21%2FU105P28T3D758541F326DT20050621155848.jpg");
                    conn = (HttpURLConnection) url.openConnection();
                    is = conn.getInputStream();
                    bitmap = BitmapFactory.decodeStream(is);
                    bp=bitmap;
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (fos!=null)
                            fos.close();
                        if (is!=null)
                            is.close();
                        conn.disconnect();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        return bp;
    }
}

解决方案 »

  1.   

    你这网络请求是异步的,你要等网络请求完成再去使用bitmap
      

  2.   

    那我这个怎么改,我想这个方法的返回值是Bitmap
      

  3.   

    Handler了解下,网络请求完获得bitmap后,通过Handler发消息通知主线程更新UI
      

  4.   

    去用Glide去做获取网络图片啊