Java 我正在尝试从本地服务器检索信息,并在android中以简单的listView显示
问题是图像,如何在listView中显示从服务器下载的位图图像。我已经尝试了互联网上的所有方法。我是android编程新手。请帮助我Java 我正在尝试从本地服务器检索信息,并在android中以简单的listView显示,java,android,mysql,listview,Java,Android,Mysql,Listview,问题是图像,如何在listView中显示从服务器下载的位图图像。我已经尝试了互联网上的所有方法。我是android编程新手。请帮助我 package com.example.sumit.demoapplication4; import android.app.Activity; import android.app.ListActivity; import android.app.ProgressDialog; import android.content.
package com.example.sumit.demoapplication4;
import android.app.Activity;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SimpleAdapter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;
import java.util.concurrent.ExecutionException;
public class SearchNovel extends ListActivity {
SimpleAdapter simpleAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_novel);
ArrayList<HashMap<String,Object>> feedList=new ArrayList<HashMap<String, Object>>();
HashMap<String,Object> map=new HashMap<String,Object>();
String result=getData();
if (!result.equals("")) {
String[] r1=result.split("<br>");
for(int i=0;i<r1.length;i++){
String[] r2=r1[i].split(",", 2);
String title=r2[0].toString().trim();
String author=r2[1].toString().trim();
Bitmap bitmap=null;
try {
bitmap= new GetImage().execute(title).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
map=new HashMap<String,Object>();
String stringImage=getStringImage(bitmap);
map.put("image",stringImage);
map.put("title",title);
map.put("author", author);
feedList.add(map);
}
}
simpleAdapter=new SimpleAdapter(this,feedList,R.layout.novellist,new String[]{"image","title","author"},new int[]{R.id.icon,R.id.tv1,R.id.tv2});
setListAdapter(simpleAdapter);
}
private String getStringImage(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
private String getData() {
String data=null;
class RetrieveData extends AsyncTask<String,String,String>{
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog=ProgressDialog.show(SearchNovel.this,"Connecting Server...","Please Wait...",true,true);
}
@Override
protected String doInBackground(String... params) {
String url="http://192.168.43.89/phpmyadmin/shareNovel/NovelList.php";
try{
URL u=new URL(url);
HttpURLConnection httpURLConnection=(HttpURLConnection)u.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
InputStream inputStream=httpURLConnection.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
String response="";
String temp="";
while((temp=bufferedReader.readLine())!=null){
response+=temp;
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return response;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
progressDialog.dismiss();
}
}
RetrieveData retrieveData=new RetrieveData();
try{
data= retrieveData.execute().get();
}catch (Exception e){
e.printStackTrace();
}
return data;
}
private class GetImage extends AsyncTask<String,String,Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
String title=params[0];
String url="http://192.168.43.89/phpmyadmin/shareNovel/getImageNovel.php";
Bitmap image=null;
try{
URL url1=new URL(url);
HttpURLConnection httpURLConnection=(HttpURLConnection)url1.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String data = URLEncoder.encode("title", "UTF-8") + "=" + URLEncoder.encode(title, "UTF-8");
bufferedWriter.write(data);
bufferedWriter.close();
image=BitmapFactory.decodeStream(httpURLConnection.getInputStream());
}catch (Exception e){
e.printStackTrace();
}
return image;
}
}
package com.example.sumit.demoapplication4;
导入android.app.Activity;
导入android.app.ListActivity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.util.Base64;
导入android.util.Log;
导入android.view.view;
导入android.widget.ImageButton;
导入android.widget.simpledapter;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.ByteArrayOutputStream;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
导入java.io.OutputStreamWriter;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.net.urlcoder;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Objects;
导入java.util.concurrent.ExecutionException;
公共类搜索活动{
simpledapter simpledapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u search\u novel);
ArrayList feedList=新的ArrayList();
HashMap=newHashMap();
字符串结果=getData();
如果(!result.equals(“”){
字符串[]r1=结果。拆分(
);
对于(int i=0;i使用毕加索、Glide或Volley从网络检索图像
在你滚动之前,你的方法会很好地工作。在那之后,所有的视图都会被回收,所有的东西都会变得杂乱无章
毕加索、Glide和Volley都自己使用背景线程,缓存图像,这样你就不必一次又一次地下载。他们还自己处理视图回收。他们还将尽最大努力防止OutOfMemory异常
我强烈推荐使用任何一款。它将为您节省大量时间
毕加索可以在一行中取代你获取图像的全部任务
Picasso.with(context).load(yoururl).placeholder(anylocalimage).into(yourdesiredlistitem);
滑翔:
毕加索:
截击:(这是截击的克隆,可能已经过时,请检查)
你为什么要手工完成这些工作?只需使用现有的网络库。这是最简单的集成方法,请尝试一下。