Java 图像未在Android中显示
我一直在尝试编写代码,让应用程序从网页获取图像链接,将其转换为位图,然后显示图像。但是,即使studio没有显示错误,图像也不会显示。代码写在下面。请原谅我不熟悉这个术语,使用错误Java 图像未在Android中显示,java,android,Java,Android,我一直在尝试编写代码,让应用程序从网页获取图像链接,将其转换为位图,然后显示图像。但是,即使studio没有显示错误,图像也不会显示。代码写在下面。请原谅我不熟悉这个术语,使用错误 package com.example.android.web; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Bitmap; import android.graphics.Bitmap
package com.example.android.web;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ImageView;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
ArrayList<String> url = new ArrayList<String>();
ArrayList<String> name = new ArrayList<String>();
public class DOwnloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
URL url;
int data;
HttpURLConnection connect;
String result = "";
try {
url = new URL(strings[0]);
connect = (HttpURLConnection) url.openConnection();
InputStream in = connect.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
data = reader.read();
while (data != -1) {
char curr = (char) data;
result += curr;
data = reader.read();
}
return result;
} catch (Exception e) {
return null;
}
}
}
public class Imagedownloader extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... strings) {
URL url;
int data;
HttpURLConnection connect;
String result = "";
try {
url = new URL(strings[0]);
connect = (HttpURLConnection) url.openConnection();
connect.connect();
InputStream in = connect.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
return bitmap;
} catch (Exception e) {
return null;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView img = findViewById(R.id.imageView);
DOwnloadTask task = new DOwnloadTask();
String result = "";
try {
result = task.execute("http://www.posh24.se/kandisar").get();
String[] a = result.split(
"<div class=\"listedArticles\">");
Pattern pattern = Pattern.compile("alt=\"(.*?)\"");
Matcher m = pattern.matcher(a[0]);
while (m.find()) {
name.add(m.group(1));
}
pattern=Pattern.compile("img src=\"(.*?)\"");
m=pattern.matcher(a[0]);
while(m.find()){
url.add(m.group(1));
}
Random r=new Random();
int chosen=r.nextInt(url.size());
Imagedownloader downloader=new Imagedownloader();
Bitmap bit;
bit=downloader.execute(url.get(chosen)).get();
img.setImageBitmap(bit);
} catch (Exception e) {
}
package com.example.android.web;
导入androidx.appcompat.app.appcompat活动;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.widget.ImageView;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.Random;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类MainActivity扩展了AppCompatActivity{
ArrayList url=新的ArrayList();
ArrayList name=新的ArrayList();
公共类DOwnloadTask扩展了AsyncTask{
@凌驾
受保护的字符串背景(字符串…字符串){
网址;
int数据;
HttpURLConnection;
字符串结果=”;
试一试{
url=新url(字符串[0]);
connect=(HttpURLConnection)url.openConnection();
InputStream in=connect.getInputStream();
InputStreamReader reader=新的InputStreamReader(in);
data=reader.read();
while(数据!=-1){
char curr=(char)数据;
结果+=当前值;
data=reader.read();
}
返回结果;
}捕获(例外e){
返回null;
}
}
}
公共类Imagedownloader扩展异步任务{
@凌驾
受保护位图doInBackground(字符串…字符串){
网址;
int数据;
HttpURLConnection;
字符串结果=”;
试一试{
url=新url(字符串[0]);
connect=(HttpURLConnection)url.openConnection();
connect.connect();
InputStream in=connect.getInputStream();
位图位图=位图工厂.decodeStream(in);
返回位图;
}捕获(例外e){
返回null;
}
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView img=findViewById(R.id.ImageView);
DOwnloadTask任务=新建DOwnloadTask();
字符串结果=”;
试一试{
结果=任务。执行(“http://www.posh24.se/kandisar).get();
字符串[]a=result.split(
"");
Pattern=Pattern.compile(“alt=\”(.*?\”);
Matcher m=pattern.Matcher(a[0]);
while(m.find()){
名称.添加(m.group(1));
}
pattern=pattern.compile(“imgsrc=\”(.*?\”);
m=模式匹配器(a[0]);
while(m.find()){
url.add(m.group(1));
}
随机r=新随机();
int selected=r.nextInt(url.size());
Imagedownloader downloader=新的Imagedownloader();
位图位;
bit=downloader.execute(url.get(selected)).get();
设置图像位图(位);
}捕获(例外e){
}
如果在运行期间imageview是空的,请使用Glide library显示图像,以帮助确定问题所在,我们将不胜感激 要将URL中的图像插入imageView,请使用:
Glide.with(this).load(url).into(img);
您的网络代码可能会因
networkMainThreadException
而崩溃,这可能是由于您在AsyncTask
上的get()
调用造成的。更重要的是,在未记录的情况下决不能捕获异常。在catch
块中,添加Log.e(“AkulApp”,“异常执行网络I/O”,e)
。然后,。所有这些都应该在您阅读的关于Android应用程序开发的任何书籍中进行演示。我按照您的建议记录了它,这就是我在网络I/O java.io.IOException中遇到的异常:到www.posh24.se的明文HTTP流量不允许异常在网络I/O java.lang.nullpointerExceptionn:尝试在空对象引用上调用虚拟方法“java.lang.String[]java.lang.String.split(java.lang.String)”。使用https
URL。它与Android Studio或毕加索有什么关系?它的流行程度仅次于Glide。