Java GridView未填充图像
我正在尝试连接到站点,使用Java GridView未填充图像,java,android,xml,Java,Android,Xml,我正在尝试连接到站点,使用Jsoup解析站点上的图像,将每个图像保存为位图,然后在网格视图中显示所有这些图像。从网格视图中选择图像后,图像应显示在图像视图中 然而,在运行我的代码时,我得到的只是一个空白屏幕(显示了一个祝酒词) 这是我的main活动: package com.example.homework18; import android.Manifest; import android.content.Context; import android.content.pm.PackageM
Jsoup
解析站点上的图像,将每个图像保存为位图
,然后在网格视图中显示所有这些图像。从网格视图
中选择图像后,图像应显示在图像视图
中
然而,在运行我的代码时,我得到的只是一个空白屏幕(显示了一个祝酒词)
这是我的main活动
:
package com.example.homework18;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.AsyncTask;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewSwitcher;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MainActivity extends AppCompatActivity {
ImageView img;
final private int REQUEST_INTERNET = 123;
List<Bitmap> images = new ArrayList<Bitmap>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INTERNET}, REQUEST_INTERNET);
} else{
downloadSomething();
}
final ImageSwitcher imgSwitcher = findViewById(R.id.imgSwitcher);
imgSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
ImageView imgView = new ImageView(MainActivity.this);
imgView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imgView.setBackgroundColor(Color.GREEN);
ImageSwitcher.LayoutParams imgLayoutParams = new ImageSwitcher.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL);
imgView.setLayoutParams(imgLayoutParams);
return imgView;
}
});
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position, long id) {
imgSwitcher.setImageResource(images.indexOf(position));
Toast.makeText(getBaseContext(),
"pic" + (position + 1) + " selected",
Toast.LENGTH_SHORT).show();
}
});
}
private void downloadSomething() {
//String imgurl = "http://2.bp.blogspot.com/-us_u2PBLSOI/UqgPMh7ovjI/AAAAAAAACdI/ujdyGregs6Y/s1600/amazing-butterfly-hd-image.jpg";
String texturl = "https://www.csuohio.edu/";
//new DownloadImageTask().execute(imgurl);
//new DownloadTextTask().execute(texturl);
new DownloadTextTask().execute(texturl);
}
private void getWebsite(String html) {
Document doc = Jsoup.parse(html);
Elements imgs = doc.select("img");
int num_of_imgs = imgs.size();
String img[] = new String[num_of_imgs];
int i = 0;
for(Element x : imgs){
String url = x.absUrl("src");
img[i] = url;
i++;
}
for(String url : img){
Bitmap image = DownloadImage(url);
images.add(image);
}
}
private Bitmap DownloadImage(String URL)
{
Bitmap bitmap = null;
InputStream in = download(URL);
if(in != null) {
bitmap = BitmapFactory.decodeStream(in);
try {
in.close();
} catch (IOException e1) {
Log.d("NetworkingActivity", e1.getLocalizedMessage());
}
}
return bitmap;
}
private class DownloadTextTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
return DownloadText(urls[0]);
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
getWebsite(result);
}
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
return DownloadImage(urls[0]);
}
protected void onPostExecute(Bitmap result) {
//ImageView img = (ImageView) findViewById(R.id.imageView);
images.add(result);
//img.setImageBitmap(result);
}
private String DownloadText(String URL)
{
int BUFFER_SIZE = 2000;
InputStream in = download(URL);
InputStreamReader isr = new InputStreamReader(in);
int charRead;
String str = "";
char[] inputBuffer = new char[BUFFER_SIZE];
try {
while ((charRead = isr.read(inputBuffer))>0) {
String readString = String.copyValueOf(inputBuffer, 0, charRead);
str += readString;
inputBuffer = new char[BUFFER_SIZE];
}
in.close();
} catch (IOException e) {
Log.d("Networking", e.getLocalizedMessage());
return "";
}
return str;
}
private InputStream download(String URL) {
InputStream in = null;
try {
in = OpenHttpConnection(URL);
return in;
} catch (IOException e1) {
Log.d("NetworkingActivity", e1.getLocalizedMessage());
}
return null;
}
private InputStream OpenHttpConnection(String urlString) throws IOException
{
InputStream in = null; int response = -1; URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
try{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
} catch (Exception ex)
{
Log.d("Networking", " " +ex.getLocalizedMessage()); throw new IOException("Error connecting");
}
return in;
}
public class ImageAdapter extends BaseAdapter
{
private Context context;
public ImageAdapter(Context c) { context = c; }
//---returns the number of images---
public int getCount() { return images.size(); }
//---returns the item---
public Object getItem(int position) { return position; }
//---returns the ID of an item---
public long getItemId(int position) { return position; }
//---returns an ImageView view---
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(5, 5, 5, 5);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(images.indexOf(position));
return imageView;
}
}
}
package.com.example.homework 18;
导入android.Manifest;
导入android.content.Context;
导入android.content.pm.PackageManager;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Color;
导入android.os.AsyncTask;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.Gravity;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入android.widget.ImageSwitcher;
导入android.widget.ImageView;
导入android.widget.Toast;
导入android.widget.ViewSwitcher;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.net.URLConnection;
导入java.util.ArrayList;
导入java.util.List;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
公共类MainActivity扩展了AppCompatActivity{
图像视图img;
最终专用int请求_互联网=123;
列表图像=新的ArrayList();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(ContextCompat.checkSelfPermission(这是Manifest.permission.INTERNET)
!=PackageManager.权限(已授予){
ActivityCompat.requestPermissions(这是一个新字符串[]{Manifest.permission.INTERNET},REQUEST\u INTERNET);
}否则{
下载某物();
}
最终图像切换器imgSwitcher=findViewById(R.id.imgSwitcher);
imgSwitcher.setFactory(新的ViewSwitcher.ViewFactory(){
@凌驾
公共视图makeView(){
ImageView imgView=新的ImageView(MainActivity.this);
imgView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imgView.setBackgroundColor(颜色.绿色);
ImageSwitcher.LayoutParams imgLayoutParams=新的ImageSwitcher.LayoutParams(ViewGroup.LayoutParams.WRAP_内容、ViewGroup.LayoutParams.WRAP_内容、重心、水平);
imgView.setLayoutParams(imgLayoutParams);
返回imgView;
}
});
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(新的ImageAdapter(this));
setOnItemClickListener(新的AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
imgSwitcher.setImageResource(images.indexOf(position));
Toast.makeText(getBaseContext(),
“pic”+(位置+1)+“已选定”,
吐司。长度(短)。show();
}
});
}
私有void下载某物(){
//字符串imgurl=”http://2.bp.blogspot.com/-us_u2PBLSOI/UqgPMh7ovjI/AAAAAAAACdI/ujdyGregs6Y/s1600/amazing-butterfly-hd-image.jpg";
字符串纹理=”https://www.csuohio.edu/";
//新建DownloadImageTask().execute(imgurl);
//新建DownloadTextTask().execute(Texture);
新建DownloadTextTask().execute(Texture);
}
私人网站(字符串html){
Document doc=Jsoup.parse(html);
元素imgs=文件选择(“img”);
int num of_imgs=imgs.size();
字符串img[]=新字符串[num_of_imgs];
int i=0;
对于(元素x:imgs){
字符串url=x.absUrl(“src”);
img[i]=url;
i++;
}
for(字符串url:img){
位图图像=下载图像(url);
图片。添加(图片);
}
}
私有位图下载图像(字符串URL)
{
位图=空;
InputStream in=下载(URL);
if(in!=null){
位图=BitmapFactory.decodeStream(in);
试一试{
in.close();
}捕获(IOE1异常){
Log.d(“NetworkingActivity”,e1.getLocalizedMessage());
}
}
返回位图;
}
私有类DownloadTextTask扩展了AsyncTask{
受保护的字符串doInBackground(字符串…URL){
返回下载文本(URL[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
Toast.makeText(getBaseContext(),result,Toast.LENGTH_LONG.show();
获取网站(结果);
}
}
私有类DownloadImageTask扩展了AsyncTask{
受保护位图doInBackground(字符串…URL){
返回下载图像(URL[0]);
}
受保护的void onPostExecute(位图结果){
//ImageView img=(ImageView)findViewById(R.id.ImageView);
图像。添加(结果);
//设置图像位图(结果);
}
私有字符串下载文本(字符串URL)
{
int BUFFER_SIZE=2000;
InputStream in=下载(URL);
InputStreamReader isr=新的InputStreamReader(in);
int-charRead;
字符串str=“”;
char[]inputBuffer=新字符[BUFFER_SIZE];
试一试{
而((charRead=isr.read(inputBuffer))>0){
String readString=String.copyValueOf(inputBuffer,0,charRead);
str+=readString;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<GridView
android:id="@+id/gridview"
android:layout_width="384dp"
android:layout_height="511dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
<ImageSwitcher
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/gridview"
android:id="@+id/imgSwitcher"
/>
</LinearLayout>