Android 空白应用程序,不显示任何错误

Android 空白应用程序,不显示任何错误,android,Android,这是我的图像下载应用程序,显示从图像url下载的图像,并在列表视图中显示它们。 该应用程序运行良好,没有显示任何错误,但显示为空白,我看不到任何东西 图像下载程序: public class ImageDownloader extends AsyncTask<String, Void, Bitmap> { private Bitmap bitmap; public Bitmap getBitmap() { return bitmap; }

这是我的图像下载应用程序,显示从图像url下载的图像,并在列表视图中显示它们。 该应用程序运行良好,没有显示任何错误,但显示为空白,我看不到任何东西

图像下载程序:

public class ImageDownloader extends AsyncTask<String, Void, Bitmap> {

    private Bitmap bitmap;

    public Bitmap getBitmap() {
        return bitmap;
    }

    @Override
    protected Bitmap doInBackground(String... params) {

        try {
            URL url = new URL(params[0]);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            if (connection.getContentType().contains("image")) {
                InputStream inputStream = connection.getInputStream();
                bitmap = BitmapFactory.decodeStream(inputStream);
                return bitmap;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
CustomListViewAdapter:

public class CustomListViewAdapter extends ArrayAdapter<RowItem> {

    Context context;

    public CustomListViewAdapter(Context context, int resourceId, List<RowItem> items) {
        super(context, resourceId, items);
        this.context = context;
    }

    private class ViewHolder {
        ImageView imageView;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        RowItem rowItem = getItem(position);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {

            convertView = inflater.inflate(R.layout.list_item, null);

            holder = new ViewHolder();

            holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.imageView.setImageBitmap(rowItem.getBitmap());

        return convertView;
    }

}
公共类CustomListViewAdapter扩展了ArrayAdapter{
语境;
公共CustomListViewAdapter(上下文上下文、int resourceId、列表项){
超级(上下文、资源ID、项目);
this.context=上下文;
}
私有类视窗持有者{
图像视图图像视图;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
RowItem RowItem=getItem(位置);
LayoutInflater充气器=(LayoutInflater)context.getSystemService(Activity.LAYOUT\u充气器\u SERVICE);
if(convertView==null){
convertView=充气机。充气(R.layout.list_项,空);
holder=新的ViewHolder();
holder.imageView=(imageView)convertView.findViewById(R.id.imageView);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.imageView.setImageBitmap(rowItem.getBitmap());
返回视图;
}
}
主要活动:

public class MainActivity extends AppCompatActivity {

    ArrayList<String> urls = new ArrayList<>();

    ArrayList<Bitmap> bitmaps = new ArrayList<>();

    ListView listView;

    List<RowItem> rowItems;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("Flag 1");
        addUrls();
        System.out.println("Flag 2");
        for (int i = 0; i < urls.size(); i++) {

            ImageDownloader imageDownloader = new ImageDownloader();

            imageDownloader.execute(urls.get(i));

            bitmaps.add(imageDownloader.getBitmap());

            System.out.println("Size"+bitmaps.size());
        }

        System.out.println("Flag 3");
        rowItems = new ArrayList<>();

        for (int i = 0; i < bitmaps.size(); i++) {
            RowItem item = new RowItem(bitmaps.get(i));
            rowItems.add(item);
        }
        System.out.println("Flag 4");
        listView = (ListView) findViewById(R.id.list);
        CustomListViewAdapter adapter = new CustomListViewAdapter(this, R.layout.list_item, rowItems);
        listView.setAdapter(adapter);
        System.out.println("Flag 5");
    }

    public void addUrls() {

        urls.add("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTXEZRoYOhIJxL5foNz_NlatDlgYStzZgVIiKuo6vtRtz2wY-8b4Q");
        urls.add("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSFL3WYbqNOX-dwjtT1LroBlY5W-3YuwSIuCMRaLpnjMXbVPEJy");
        urls.add("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQiwgrJeAJN-7lcy92N51uP7XzccK_p-fTSJNCXPLPSVih8wqPf");
        urls.add("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT19dYLCEZlMRqojedJB-05jTrflD74nasvkXs-SdVeyM2BEpCSFA");
        urls.add("http://wallpaperswide.com/download/high_tech_earth-wallpaper-2880x1800.jpg");
        urls.add("https://www.gettyimages.ca/gi-resources/images/Homepage/Hero/UK/CMS_Creative_164657191_Kingfisher.jpg");
        urls.add("https://images.unsplash.com/photo-1418489098061-ce87b5dc3aee?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=2f033882f3c25404e3f904fbfe2351be&w=1000&q=80");
        urls.add("https://techcrunch.com/wp-content/uploads/2018/03/gettyimages-705351545.jpg?w=730&crop=1");

    }
}
public类MainActivity扩展了AppCompatActivity{
ArrayList URL=新的ArrayList();
ArrayList位图=新的ArrayList();
列表视图列表视图;
列出项目;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println(“标志1”);
addURL();
System.out.println(“标志2”);
对于(int i=0;i
activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context="com.example.danishrizvi.test4.MainActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:visibility="visible"/>

</RelativeLayout>


我建议您使用库从URL like或加载图像(使用内存和磁盘缓存以避免每次下载相同的图像)

我建议您使用库从URL like或加载图像(使用内存和磁盘缓存以避免每次下载相同的图像)

棘手的部分是以下几行:

imageDownloader.execute(urls.get(i));
bitmaps.add(imageDownloader.getBitmap());

由于
ImageDownloader
AsyncTask
,因此它在另一个线程上以异步方式执行,在调用第2行时,还没有收到任何内容。您真正需要做的是覆盖接收请求结果(位图)的位置,并将其推送到适配器。

棘手的部分是以下几行:

imageDownloader.execute(urls.get(i));
bitmaps.add(imageDownloader.getBitmap());

由于
ImageDownloader
AsyncTask
,因此它在另一个线程上以异步方式执行,在调用第2行时,还没有收到任何内容。您真正需要做的是覆盖接收请求结果(位图)的位置,并将其推送到适配器。

因此,如果您想在适配器中显示url中的图像,请使用
滑动
。它将删除不必要的代码(在位图中转换并传递它),并且工作会很顺利。我认为,当您调用bitmaps.add(imageDownloader.getBitmap())时,您应该通过异步任务的
onPostExecute
将位图发送到主活动
它将返回empty、debug和checkBetter以用于在listview中加载图像:所以,如果您想在适配器中显示来自url的图像,那么请使用
Glide
。它将删除不必要的代码(在位图中转换并传递它),并且工作会很顺利。我认为,当您调用bitmaps.add(imageDownloader.getBitmap())时,您应该通过异步任务的
onPostExecute
将位图发送到主活动它将返回empty、debug和checkBetter以用于在listview中加载图像:已同意。几乎没有理由手动执行此操作-我不知道我使用过的任何应用程序需要手动加载此内容。@Chris我只是一个新手,这是我第一个android应用程序之一,我这样做只是为了了解如何进行编程。我知道像你这样的专业人士有更好的工作要做,但我只是想从基础上学习。所以如果