package com.example.day0324_json;
import java.util.List;
import java.util.Map;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private String url = "http://10.16.154.26:8080/ServerForJSON/JsonServlet";
private ListView listView;
private ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyTask myTask = new MyTask();
myTask.execute(url);
}
class MyTask extends AsyncTask<String, Void, List<Map<String, Object>>> {
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
/*dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("标题");
dialog.setMessage("正在下载");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.show();*/
}
@Override
protected List<Map<String, Object>> doInBackground(String... params) {
// 从URl读取字符串(该字符串是JSON格式的)
String jsonStr = HttpUtils.getJSONStr(params[0]);
//JSONUtils里面的parseJSONStr方法解析json数据
List<Map<String, Object>> person = JSONUtils.parseJSONStr(jsonStr);
/* for (Map<String, Object> c : person) {
// Log.i("doInBackground", jsonStr);
Log.i("doInBackground", c + "");
}*/
return person;
}
@Override
protected void onPostExecute(final List<Map<String, Object>> result) {
// TODO Auto-generated method stub
//dialog.dismiss();
//Log.i("onPostExecute", result + "");
listView = (ListView) findViewById(R.id.lv);
listView.setAdapter(new BaseAdapter() {
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
View view = null;
ViewHolder holder = null;
if (convertView == null) {
view = LayoutInflater.from(MainActivity.this).inflate(
R.layout.items, null);
holder = new ViewHolder();
holder.textView1 = (TextView) view.findViewById(R.id.tv1);
holder.textView2 = (TextView) view.findViewById(R.id.tv2);
holder.imageView = (ImageView) view.findViewById(R.id.iv);
view.setTag(holder);
} else {
view = convertView;
holder = (ViewHolder) view.getTag();
}
Map<String, Object> map = result.get(position);
holder.imageView.setImageBitmap((Bitmap) map.get("bitmap"));
holder.textView1.setText(map.get("id")+"");
holder.textView2.setText(map.get("name") + "");
return view;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return result.size();
}
class ViewHolder {
public TextView textView1, textView2;
public ImageView imageView;
}
});
image = (ImageView) findViewById(R.id.imageview);
listView.setEmptyView(image);
super.onPostExecute(result);
}
}
}
package com.example.day0324_json;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
import android.graphics.Bitmap;
public class JSONUtils {
//录入JSON字符串并返回List<Map<String,Object>>
public static List<Map<String, Object>> parseJSONStr(String jsonStr){
try {
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
//JSON字符串中{}表示JSONObject
//这里创建JSONObject对象
JSONObject jsonObject = new JSONObject(jsonStr);
//根据JSONObject对象中冒号前的值(key)获取冒号后的内容(vaule)
//后面的值是JSONArray数组
JSONArray jsonArray = (JSONArray) jsonObject.get("person");
//遍历数组
for (int i = 0; i < jsonArray.length(); i++) {
Map<String,Object> map = new HashMap<String, Object>();
JSONObject jsonObject2= (JSONObject) jsonArray.get(i);
String address = jsonObject2.getString("address");
int id = jsonObject2.getInt("id");
String name = jsonObject2.getString("name");
String url ="Http://10.16.154.26:8080/"+address;
//通过URL构造出一个BitMap位图对象
Bitmap bitmap = HttpUtils.getHttpBitmap(url);
//map.put("address", address);
map.put("id", id);
map.put("name", name);
map.put("bitmap", bitmap);
list.add(map);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
package com.example.day0324_json;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Entity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class HttpUtils {
//从网络url上下载字符串
public static String getJSONStr(String url){
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
try {
HttpResponse httpResponse = client.execute(get);
if (httpResponse.getStatusLine().getStatusCode()==200) {
HttpEntity entity = httpResponse.getEntity();
InputStream is = entity.getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bys = new byte[1024];
int len = 0;
while((len = is.read(bys))!=-1){
baos.write(bys, 0, len);
}
return baos.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//输入网址返回一个位图对象
public static Bitmap getHttpBitmap(String url){
HttpClient client = new DefaultHttpClient();//HTTP客户端
HttpGet get = new HttpGet(url);//GET请求
try {
HttpResponse httpResponse = client.execute(get);
if (httpResponse.getStatusLine().getStatusCode()==200) {
HttpEntity entity = httpResponse.getEntity();
InputStream is = entity.getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bys = new byte[1024];
int len =0;
while((len = is.read(bys))!=-1){
baos.write(bys, 0, len);
}
byte[] data = baos.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
return bitmap;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}