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