main.xml如下:
<RelativeLayout 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"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dip"
android:textSize="22sp"
android:text="GSON测试" />
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="180dip"
android:text="将复杂JSON转换为JavaBean格式"
/>
</RelativeLayout>
TestJavaBean如下:
package com.wy;
public class TestJavaBean {
public String COUPON_NO;
public String COUPON_NM;
public String COUPON_IMG;
public String COUPON_CP;
public String COUPON_EXPIRE_DATE;
public String COUPON_EXPIRE_START_DM;
public String COUPON_EXPIRE_END_DM;
public String COUPON_grant_FLAG;
public TestJavaBean() {
super();
}
public String getCOUPON_NO() {
return COUPON_NO;
}
public void setCOUPON_NO(String cOUPON_NO) {
COUPON_NO = cOUPON_NO;
}
public String getCOUPON_NM() {
return COUPON_NM;
}
public void setCOUPON_NM(String cOUPON_NM) {
COUPON_NM = cOUPON_NM;
}
public String getCOUPON_IMG() {
return COUPON_IMG;
}
public void setCOUPON_IMG(String cOUPON_IMG) {
COUPON_IMG = cOUPON_IMG;
}
public String getCOUPON_CP() {
return COUPON_CP;
}
public void setCOUPON_CP(String cOUPON_CP) {
COUPON_CP = cOUPON_CP;
}
public String getCOUPON_EXPIRE_DATE() {
return COUPON_EXPIRE_DATE;
}
public void setCOUPON_EXPIRE_DATE(String cOUPON_EXPIRE_DATE) {
COUPON_EXPIRE_DATE = cOUPON_EXPIRE_DATE;
}
public String getCOUPON_EXPIRE_START_DM() {
return COUPON_EXPIRE_START_DM;
}
public void setCOUPON_EXPIRE_START_DM(String cOUPON_EXPIRE_START_DM) {
COUPON_EXPIRE_START_DM = cOUPON_EXPIRE_START_DM;
}
public String getCOUPON_EXPIRE_END_DM() {
return COUPON_EXPIRE_END_DM;
}
public void setCOUPON_EXPIRE_END_DM(String cOUPON_EXPIRE_END_DM) {
COUPON_EXPIRE_END_DM = cOUPON_EXPIRE_END_DM;
}
public String getCOUPON_grant_FLAG() {
return COUPON_grant_FLAG;
}
public void setCOUPON_grant_FLAG(String cOUPON_grant_FLAG) {
COUPON_grant_FLAG = cOUPON_grant_FLAG;
}
@Override
public String toString() {
return "TestJavaBean [COUPON_NO=" + COUPON_NO + ", COUPON_NM="
+ COUPON_NM + ", COUPON_IMG=" + COUPON_IMG + ", COUPON_CP="
+ COUPON_CP + ", COUPON_EXPIRE_DATE=" + COUPON_EXPIRE_DATE
+ ", COUPON_EXPIRE_START_DM=" + COUPON_EXPIRE_START_DM
+ ", COUPON_EXPIRE_END_DM=" + COUPON_EXPIRE_END_DM
+ ", COUPON_grant_FLAG=" + COUPON_grant_FLAG + "]";
}
}
MainActivity如下:
package com.wy;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
/**
* Demo描述:
* 利用GSON解析JSON数据--将json数据封装到ArrayList<Object>中
* 注意:
* JavaBean中的每个变量名于每个JSON数据的字段严格对应.
* 比如大小写
*
*/
public class MainActivity extends Activity {
private Gson mGson;
private Button mButton;
private String mJSONData;
private ArrayList<TestJavaBean> mTestJavaBeansArrayList;
private String mUrl="your url";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
mButton=(Button) findViewById(R.id.button);
mButton.setOnClickListener(new ClickListenerImpl());
}
private class ClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
try {
mJSONData = getJSONData();
mGson = new Gson();
JSONObject jsonObject = new JSONObject(mJSONData);
JSONArray jsonArray = jsonObject.getJSONArray("COUPON_LIST");
System.out.println("需要转换的JSONArray=" + jsonArray.toString());
Type listType = new TypeToken<ArrayList<TestJavaBean>>() {}.getType();
mTestJavaBeansArrayList = mGson.fromJson(jsonArray.toString(), listType);
System.out.println("linkedList.size()="+ mTestJavaBeansArrayList.size());
for (int i = 0; i < mTestJavaBeansArrayList.size(); i++) {
TestJavaBean testJavaBean = mTestJavaBeansArrayList.get(i);
System.out.println("现在是第" + i + "个数据:" + " "+ testJavaBean.toString());
}
} catch (Exception e) {
}
break;
default:
break;
}
}
}
public String getJSONData() {
HttpEntity httpEntity = null;
HttpResponse response = null;
try {
Map<String, String> paramsHashMap = new HashMap<String, String>();
paramsHashMap.put("IF_NO", "IF0002");
paramsHashMap.put("UID", "12345");
HttpPost httpPost = new HttpPost(mUrl);
DefaultHttpClient httpClient = getHttpClient();
List<BasicNameValuePair> postData = new ArrayList<BasicNameValuePair>();
for (Map.Entry<String, String> entry : paramsHashMap.entrySet()) {
postData.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData,HTTP.UTF_8);
httpPost.setEntity(entity);
response = httpClient.execute(httpPost);
httpEntity = response.getEntity();
InputStream is = httpEntity.getContent();
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
}
return null;
}
private DefaultHttpClient getHttpClient() {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 8000);
HttpConnectionParams.setSoTimeout(httpClient.getParams(), 10000);
HttpConnectionParams.setTcpNoDelay(httpClient.getParams(), true);
return httpClient;
}
}