【问题标题】:url image download returns always null androidurl 图片下载总是返回 null android
【发布时间】:2020-11-23 18:22:45
【问题描述】:

我做错了什么?我得到 200 OK 响应,但图像位图是 null。我使用Asynctask 来检索网址图像。我正在尝试将位图分配给 imageview。

有什么想法吗?

private class loadMoreListView extends AsyncTask< Void, Void, String> {


        protected String doInBackground(Void... unused) {
            loadingMore = true;
           
            
                Bitmap mIcon11 = null;
               
                try {
                    URL url1 = new URL("https://imgaz2.staticbg.com/thumb/view/oaupload/ser1/banggood/images/E4/21/c5424852-82af-47a1-8a13-54da3d1bc049.jpg");
                    HttpURLConnection connection  = (HttpURLConnection) url1.openConnection();
                    connection.setReadTimeout(10000);
                    connection.setConnectTimeout(10000);
                    connection.setDoInput(true);
                    connection.setRequestMethod("GET");
                    connection.setUseCaches(false);
                    connection.setAllowUserInteraction(false);
                    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                    int responceCode = connection.getResponseCode();
                    Log.i("response_line", Integer.toString(responceCode));
                    InputStream isstream =null;
                    isstream=connection.getInputStream();

                 //inputstream named isstream returns null
                    mIcon11 = BitmapFactory.decodeStream(isstream);
                } catch (Exception e) {
                    Log.e("Error", e.getMessage());
                    e.printStackTrace();
                }

               

            return result;
        }

【问题讨论】:

  • 可能是图片的分辨率太大了。尝试使用较小的图片。
  • 所有图片都是这样的...需要想办法...59kb是图片300x300大小300dpi
  • 您是否考虑过使用 Glide 而不是使用 AsyncTask? AsyncTask 已弃用。
  • 滑行?已弃用但可以使用...问题是因为 AsyncTask 而发生的?
  • "Glide? 已弃用但可以使用" -- Glide 未被弃用。 AsyncTask 已弃用。

标签: java android android-imageview httpurlconnection


【解决方案1】:

看看Picasso/Picasso Github

它允许你在几行代码中做你想做的事情(NB 注意 Android 28+ http 除非你做一些@ 987654323@!):

Picasso.get().load("https://i.imgur.com/DvpvklR.png").into(imageView);

它处理图像、线程、占位符、转换等的下载、内存或磁盘缓存和回收。无需重新发明轮子。哎呀,您甚至可以调整图像大小并具有各种裁剪选项

Picasso.get()
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)

更新:

正如其他人所提到的,您不应该使用 AsyncTask,因为它已被弃用。您可以使用许多其他库以线程化和更易读的方式发出网络请求,例如Volley。这可以与毕加索结合使用,以实现您想要的。

下面是一个示例,它从谷歌加载一些文本以及加载文本时的图像:

build.gradle:

dependencies {
    ...
    implementation 'com.android.volley:volley:1.1.1'
    implementation 'com.squareup.picasso:picasso:2.71828'
}

AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

fragment_first.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FirstFragment">

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="200dp"
        android:layout_height="200dp"
        app:layout_constraintBottom_toTopOf="@id/textview"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_first_fragment"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/textview"/>

</androidx.constraintlayout.widget.ConstraintLayout>

FirstFragment.java:

package com.example.myapplication;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.squareup.picasso.Picasso;

public class FirstFragment extends Fragment {

    @Override
    public View onCreateView(
            LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState
    ) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_first, container, false);
    }

    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        TextView textView = view.findViewById(R.id.textview);
        ImageView imageView = view.findViewById(R.id.imageview);

        RequestQueue queue = Volley.newRequestQueue(getActivity());
        String url = "https://www.google.com";

        // Request a string response from the provided URL.
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Display the first 500 characters of the response string.
                        textView.setText("Response is: " + response.substring(0, 500));
                        Picasso.get().load("https://i.imgur.com/DvpvklR.png").into(imageView);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                textView.setText("That didn't work!");
            }
        });

        // Add the request to the RequestQueue.
        queue.add(stringRequest);
    }
}

【讨论】:

猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 2012-08-02
  • 2014-12-31
  • 2018-01-16
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多