Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
图像不显示Android Java_Java_Android_Xml - Fatal编程技术网

图像不显示Android Java

图像不显示Android Java,java,android,xml,Java,Android,Xml,我正在尝试构建一个简单的应用程序(一个下载图像和imageView的按钮),它可以下载图像,但图像不会显示在应用程序中。应用程序运行时没有任何错误,但图像未显示。这是我的主要活动代码。多谢 import androidx.appcompat.app.AppCompatActivity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; impor

我正在尝试构建一个简单的应用程序(一个下载图像和imageView的按钮),它可以下载图像,但图像不会显示在应用程序中。应用程序运行时没有任何错误,但图像未显示。这是我的主要活动代码。多谢

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

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

public class MainActivity extends AppCompatActivity {
    ImageView imageView;
    public void downloadImage(View view){
        ImageDownloader task = new ImageDownloader();
        Bitmap myImage;
        try{
            myImage = task.execute("https://wallpapercave.com/wp/wp4410880.jpg").get();

            imageView.setImageBitmap(myImage);
        }catch (Exception e){
            e.printStackTrace();
        }

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.imageView);
    }
    public class ImageDownloader extends AsyncTask<String, Void, Bitmap>{

        @Override
        protected Bitmap doInBackground(String... urls) {
            try {
                URL url = new URL(urls[0]);

                HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                connection.connect();

                InputStream in = connection.getInputStream();

                Bitmap myBitmap = BitmapFactory.decodeStream(in);

                return myBitmap;
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
}
导入androidx.appcompat.app.appcompat活动;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.ImageView;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
公共类MainActivity扩展了AppCompatActivity{
图像视图图像视图;
公共void下载图像(视图){
ImageDownloader任务=新建ImageDownloader();
位图图像;
试一试{
myImage=task.execute(“https://wallpapercave.com/wp/wp4410880.jpg).get();
设置图像位图(myImage);
}捕获(例外e){
e、 printStackTrace();
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=findViewById(R.id.imageView);
}
公共类ImageDownloader扩展异步任务{
@凌驾
受保护位图doInBackground(字符串…URL){
试一试{
URL=新URL(URL[0]);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.connect();
InputStream in=connection.getInputStream();
位图myBitmap=BitmapFactory.decodeStream(在中);
返回我的位图;
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
}
}
试试那种方法

在下载任务中定义方法
onPostExecute()

并在其中调用setImageBitmap,在主线程上的
doinbackground
之后调用此方法

像下面这样做

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

    @Override
    protected Bitmap doInBackground(String... urls) {
        try {
            URL url = new URL(urls[0]);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.connect();

            InputStream in = connection.getInputStream();

            Bitmap myBitmap = BitmapFactory.decodeStream(in);

            return myBitmap;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
   public void onPostExecute(Bitmap myImage){ //the returned value of `doInbackground` gets here
      imageView.setImageBitmap(myImage);
 }
}
公共类ImageDownloader扩展异步任务{
@凌驾
受保护位图doInBackground(字符串…URL){
试一试{
URL=新URL(URL[0]);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.connect();
InputStream in=connection.getInputStream();
位图myBitmap=BitmapFactory.decodeStream(在中);
返回我的位图;
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
public void onPostExecute(位图myImage){//返回的'doInbackground'值在这里得到
设置图像位图(myImage);
}
}

另外,请不要对任务调用get()方法,只需说
newdownloadtask().execute()

任务。执行(”https://wallpapercave.com/wp/wp4410880.jpg“.get();
是异步的,您在调用此方法后继续运行的代码。”–实际上,
get()
调用使其同步,这可能导致他们忽略的
networkMainThreadException
。不过,你的解决方案也会解决这个问题;你只是误解了具体的根本原因。仅供参考。干杯谢谢,我从来没有使用过get(),但我只知道如何使它工作,如果get()使它同步到NOMTE,正如OP所说,也没有例外,所以请提供并回答OP代码中的问题,请告诉我我也想学习,我也在编辑我的答案。是的,他们可能只是不熟悉logcat,但是,所以他们甚至不知道抛出了一个
异常
,因为他们捕获了所有内容,却什么也没做。不管怎样,你的方法是对的。我不需要用另一个答案来分散OP的注意力。:-)干杯好的,先生,因为get使它同步并且是异常的原因,我认为应该有一些侦听器可以在那之后调用,对吗?对不起,我不太确定你在问什么,但是你已经有了正确的代码设置。但是,我认为您的意思是“也请不要调用get()方法…”。