您的位置:首页 > 理论基础 > 计算机网络

Android网络取数据显示到ListView实例

2015-08-12 18:58 561 查看
package com.example.network;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.example.network.ConnectionUtils.CallConnectionInterface;
import com.example.network.ConnectionUtils.Method;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class NetworkListActivity extends Activity {
	private ListView mListView;
	private String url = "http://192.168.1.203/json/around";
	private AsyncLoaderImage asyncLoaderImage ;

	private ArrayList<ContentBean> list = new ArrayList<ContentBean>();
	private MybaseAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		getWindow().requestFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mListView = (ListView) findViewById(R.id.networklist);
		adapter = new MybaseAdapter(this);
		mListView.setAdapter(adapter);

		ConnectionUtils connectionUtils = new ConnectionUtils();
		connectionUtils.asyncTaskConnection(url, null, Method.GET,
				new CallConnectionInterface() {

					@Override
					public void executeResult(String result) {

						Log.v("TAG", "result" + result);
						try {
							JSONObject jsonObject = new JSONObject(result);
							JSONObject info = jsonObject.getJSONObject("info");
							JSONArray merchantKey = info
									.getJSONArray("merchantKey");
							int length = merchantKey.length();
							for (int i = 0; i < length; i++) {
								JSONObject obj = merchantKey.getJSONObject(i);
								String name = obj.getString("name");
								String coupon = obj.getString("coupon");
								String location = obj.getString("location");
								String distance = obj.getString("distance");
								String picUrl = obj.getString("picUrl");
								String couponType = obj.getString("couponType");
								String cardType = obj.getString("cardType");
								String groupType = obj.getString("groupType");

								ContentBean content = new ContentBean();
								content.setName(name);
								content.setCoupon(coupon);
								content.setLocation(location);
								content.setDistance(distance);
								content.setPicUrl(picUrl);
								content.setCouponType(couponType);
								content.setCardType(cardType);
								content.setGroupType(groupType);
								list.add(content);

							}
							adapter.setAdapterData(list);

						} catch (JSONException e) {
							e.printStackTrace();
						}
					}
				});

	}

	private class MybaseAdapter extends BaseAdapter {
		private ArrayList<ContentBean> list = new ArrayList<ContentBean>();
		private LayoutInflater mInflater;

		public MybaseAdapter(Context context) {
			mInflater = LayoutInflater.from(context);
		}

		public void setAdapterData(ArrayList<ContentBean> list) {
			this.list = list;
			notifyDataSetChanged();
		}

		@Override
		public int getCount() {

			return list.size();
		}

		@Override
		public Object getItem(int position) {

			return list.get(position);
		}

		@Override
		public long getItemId(int position) {

			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			final ViewHolder viewholder;
			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.list_item_layout, null);
				viewholder = new ViewHolder();
				viewholder.name = (TextView) convertView.findViewById(R.id.item_title);
				viewholder.coupon = (TextView) convertView.findViewById(R.id.item_favorable);
				viewholder.pic = (ImageView) convertView.findViewById(R.id.item_icon);
				viewholder.location=(TextView) convertView.findViewById(R.id.item_address);
				viewholder.distance=(TextView) convertView.findViewById(R.id.item_distance);
				viewholder.couponType=(ImageView) convertView.findViewById(R.id.item_identification);
				viewholder.cardType=(ImageView) convertView.findViewById(R.id.item_couponType);
				viewholder.groupType=(ImageView) convertView.findViewById(R.id.item_groupType);
				
				convertView.setTag(viewholder);
			} else {
				viewholder = (ViewHolder) convertView.getTag();
			}
			ContentBean content = (ContentBean) getItem(position);
			viewholder.name.setText(content.getName());
			viewholder.coupon.setText(content.getCoupon());
			viewholder.location.setText(content.getLocation());
			viewholder.distance.setText(content.getDistance());
			String picUrl = content.getPicUrl();
			String couponType=content.getCouponType();
			String cardType=content.getCardType();
			String groupType=content.getGroupType();
			if(couponType.equals("YES")){
				viewholder.couponType.setVisibility(View.VISIBLE);
			}else{
				viewholder.couponType.setVisibility(View.GONE);
			}
			if(cardType.equals("YES")){
				viewholder.cardType.setVisibility(View.VISIBLE);
			}else{
				viewholder.cardType.setVisibility(View.GONE);
			}
			if(groupType.equals("YES")){
				viewholder.groupType.setVisibility(View.VISIBLE);
			}else{
				viewholder.groupType.setVisibility(View.GONE);
			}
//			asyncLoaderImage= AsyncLoaderImage.getInstanceAsyncLoaderImage();
//			asyncLoaderImage.loadBitmap(getResources(), picUrl, viewholder.pic);
			new AsyncTask<String, Void, Bitmap>() {

				@Override
				protected Bitmap doInBackground(String... params) {
					String httpUrl = params[0];
					Bitmap bitmap = getBitmapByNetwork(httpUrl);

					return bitmap;
				}

				@Override
				protected void onPostExecute(Bitmap result) {

					if (result != null)
						viewholder.pic.setImageBitmap(result);

				}
			}.execute(picUrl);

			return convertView;
		}

		private class ViewHolder {
			TextView name;
			TextView coupon;
			TextView location;
			TextView distance;
			ImageView pic;
			ImageView couponType;
			ImageView cardType;
			ImageView groupType;
		}

	}

	private class ContentBean {
		private String name;
		private String coupon;
		private String location;
		private String distance;
		private String picUrl;
		private String couponType;
		private String cardType;
		private String groupType;

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getCoupon() {
			return coupon;
		}

		public void setCoupon(String coupon) {
			this.coupon = coupon;
		}

		public String getLocation() {
			return location;
		}

		public void setLocation(String location) {
			this.location = location;
		}

		public String getDistance() {
			return distance;
		}

		public void setDistance(String distance) {
			this.distance = distance;
		}

		public String getPicUrl() {
			return picUrl;
		}

		public void setPicUrl(String picUrl) {
			this.picUrl = picUrl;
		}

		public String getCouponType() {
			return couponType;
		}

		public void setCouponType(String couponType) {
			this.couponType = couponType;
		}

		public String getCardType() {
			return cardType;
		}

		public void setCardType(String cardType) {
			this.cardType = cardType;
		}

		public String getGroupType() {
			return groupType;
		}

		public void setGroupType(String groupType) {
			this.groupType = groupType;
		}

	}

	private Bitmap getBitmapByNetwork(String httpurl) {
		InputStream in = null;
		try {
			URL url = new URL(httpurl);
			in = url.openStream();
			Bitmap bitmap = BitmapFactory.decodeStream(in);
			return bitmap;
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return null;
	}

}


主页面Xml布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/light_grey_white"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white" >

        <ImageView
            android:id="@+id/title_btn_back"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:src="@drawable/btn_back" />

        <TextView
            android:id="@+id/title_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/title_btn_back"
            android:text="@string/My_Watchlist"
            android:textSize="20sp" />
    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/darker_gray" />

    <ListView
        android:id="@+id/networklist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:dividerHeight="10dp" >
    </ListView>

</LinearLayout>


ListView单项布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white" >

    <ImageView
        android:id="@+id/item_icon"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="@drawable/meituan_image1" />

    <ImageView
        android:id="@+id/item_identification"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_alignParentRight="true"
        android:background="@drawable/near_card"
        android:visibility="invisible" />

    <ImageView
        android:id="@+id/item_couponType"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_toLeftOf="@id/item_identification"
        android:background="@drawable/near_ticket"
        android:visibility="invisible" />

    <ImageView
        android:id="@+id/item_groupType"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_toLeftOf="@id/item_couponType"
        android:background="@drawable/near_group"
        android:visibility="invisible" />

    <TextView
        android:id="@+id/item_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_toLeftOf="@id/item_groupType"
        android:layout_toRightOf="@id/item_icon"
        android:ellipsize="end"
        android:singleLine="true"
        android:textSize="16sp"
        android:text="皇家肥牛特色火锅新会展店 " />

    <TextView
        android:id="@+id/item_favorable"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/item_title"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@id/item_icon"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="189元享5人豪华套餐 "
        android:textColor="@android:color/holo_red_light"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/item_distance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/item_icon"
        android:layout_alignParentRight="true"
        android:text="2.0km"
        android:textColor="@android:color/darker_gray" 
        android:textSize="10sp"/>

    <ImageView
        android:id="@+id/item_info"
        android:layout_width="15dp"
        android:layout_height="15dp"
        android:layout_alignBottom="@id/item_distance"
        android:layout_toLeftOf="@id/item_distance"
        android:background="@drawable/info_map" />

    <TextView
        android:id="@+id/item_address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/item_icon"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_toLeftOf="@id/item_info"
        android:layout_toRightOf="@id/item_icon"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="四川省成都市高新区天府大道中段"
        android:textColor="@android:color/darker_gray"
        android:textSize="12sp" />

</RelativeLayout>


获取网络资源封装的类

package com.scxh.android.networkconnections;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.os.AsyncTask;

public class ConnectionUtils {

	public enum Method {
		GET, POST
	}

	// 实现接口回调 第一步定义接�?
	public interface CallConnectionInterface {
		public void executeResult(String result);
	}

	// 实现接口回调 第二�?声明接口,定义注册接口入�?
	public CallConnectionInterface mCallConnectionInterface;

//	public void setonCallConnectionInterface(
//			CallConnectionInterface callConnectionInterface) {
//		mCallConnectionInterface = callConnectionInterface;
//	}
//
//	public ConnectionUtils(CallConnectionInterface callConnectionInterface) {
//		mCallConnectionInterface = callConnectionInterface;
//	}

	public void asyncTaskConnection(final String url,
			final HashMap<String, String> parameterMap, final Method method,
			CallConnectionInterface callConnectionInterface) {
		
		mCallConnectionInterface = callConnectionInterface;
		
		new AsyncTask<Void, Void, String>() {
			protected String doInBackground(Void[] params) {

				String result = "";
				try {
					result = getHttpConnection(url, parameterMap, method);
				} catch (ClientProtocolException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}

				return result;

			}

			@Override
			protected void onPostExecute(String result) {
				super.onPostExecute(result);

				// ====第三�?调用接口方法
				mCallConnectionInterface.executeResult(result);
			}
		}.execute();

	}

	public String getHttpConnection(String url,
			HashMap<String, String> parameterMap, Method httpMethod)
			throws ClientProtocolException, IOException {

		HttpClient httpClient = new DefaultHttpClient();

		HttpUriRequest request = getHttpUrlRequest(url, parameterMap,httpMethod);

		HttpResponse response = httpClient.execute(request);

		int statusCode = response.getStatusLine().getStatusCode();

		if (statusCode == HttpStatus.SC_OK) {

			String content = EntityUtils.toString(response.getEntity(),"utf-8");

			return content;
		} else {
			return "请服务端出错";
		}
	}

	public HttpUriRequest getHttpUrlRequest(String url,
			HashMap<String, String> parameterMap, Method method)
			throws ClientProtocolException, IOException {
		if (method == Method.POST) {
			HttpPost httpPost = new HttpPost(url);
			// =========================组装Post参数====================
			ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();

			Set<String> set = parameterMap.keySet();
			Iterator<String> iterator = set.iterator();
			while (iterator.hasNext()) {
				String key = iterator.next();
				String name = parameterMap.get(key);
				System.out.println("key " + key + "name :" + name);

				BasicNameValuePair namePair = new BasicNameValuePair(key, name);
				parameters.add(namePair);
			}

			UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,
					HTTP.UTF_8);

			httpPost.setEntity(entity);

			httpPost.setHeader("Content-Type",
					"application/x-www-form-urlencoded; charset=utf-8");

			return httpPost;

		} else {
			if (parameterMap != null) {
				// ================组装Get请求参数===============================
				// String url =
				// "http://192.168.1.203/web1502/login_servle?userName=张三&passWord=123";

				if (url.indexOf("?") < 0) {
					url = url + "?";
				}

				Set<String> set = parameterMap.keySet();
				Iterator<String> iterator = set.iterator();
				while (iterator.hasNext()) {
					String key = iterator.next();
					String name = parameterMap.get(key);
					System.out.println("key " + key + "name :" + name);

					url = url + "&" + key + "=" + name;
				}

				
				// ================组装Get请求参数===============================
			}

			HttpGet httpGet = new HttpGet(url);

			return httpGet;
		}
	}
}


实现效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: