intent json对象 传递_JSON:在两个activity之间使用intent传递list类型的对象

[
      在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面

博客时间:2012-11-12 08:49 在两个activity之间传递list类型的对象。

第一个界面

[java]

view plain

copy

print

?

import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import org.json.JSONArray;

import org.json.JSONObject;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public classQueryActivity extends Activity {

private Buttonbutton;

private List>list;

Stringresult="[{\"city\":\"changsha\",\"street\":\"no2\"},{\"city\":\"beijing\",\"street\":\"no5\"}]";

@SuppressWarnings("unchecked")

public void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_query);

this.button=(Button)findViewById(R.id.button);

button.setOnClickListener(new buttonClick());

String result1="{\"address\":"+result+"}";

Log.d("result1",result1);

try{

JSONObject json=new JSONObject(result1);

JSONArray jsonlist=json.getJSONArray("address");

list = new ArrayList>();

list=JsonHelper.toList(jsonlist);

Log.d("list***",list.toString());

}

catch(Exception e){

}

}

classbuttonClickimplements OnClickListener{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intentintent=newIntent(QueryActivity.this,ListViewActivity.class);

intent.putExtra("list", (Serializable)list);

QueryActivity.this.startActivity(intent);

Log.d("list",(Serializable)list+"");

}

}

}

第二个界面

有两个layout文件 创建时候注意listview在创建activity的时候的layout中定义。

例如:ListViewActivity

Java

[在两个activity之间传递list类型的对象。 第一个界面import java.io.Serializable;import java.util.ArrayList;import java.util.List;import java.util.Map; import org.

[java]

view plain

copy

print

?

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.view.Menu;

import android.widget.ListView;

import android.widget.SimpleAdapter;

public classListViewActivity extends Activity {

@SuppressWarnings("unchecked")

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view);

Intent intent=getIntent();

List> mylist = (List>)intent.getSerializableExtra("list");

ListView list = (ListView)findViewById(R.id.MyListView);

SimpleAdapter mSchedule = new SimpleAdapter(

this, //没什么解释

mylist,//数据来源

R.layout.my_listitem,//ListItem的XML实现

//动态数组与ListItem对应的子项

new String[] {"city","street"},

//ListItem的XML文件里面的两个TextView ID

new int[] {R.id.edit01,R.id.edit02});

//添加并且显示

list.setAdapter(mSchedule);

}

}

其中还会用到一个工具类 将一个jsonArray类型的字符串转换成list—hashmap

Java.class

[java]

view plain

copy

print

?

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import java.util.*;

@SuppressWarnings({ "rawtypes", "unchecked" })

public classJsonHelper {

public static Object toJSON(Objectobject) throwsJSONException {

if (objectinstanceof Map) {

JSONObject json = new JSONObject();

Map map = (Map) object;

for (Object key : map.keySet()) {

json.put(key.toString(), toJSON(map.get(key)));

}

return json;

} else if (object instanceof Iterable) {

JSONArray json = new JSONArray();

for (Object value : ((Iterable)object)) {

json.put(value);

}

return json;

} else {

return object;

}

}

publicstaticbooleanisEmptyObject(JSONObject object) {

return object.names() ==null;

}

publicstaticMap getMap(JSONObject object, String key)throws JSONException {

returntoMap(object.getJSONObject(key));

}

publicstaticMap toMap(JSONObject object)throws JSONException {

Map map = newHashMap();

Iterator keys = object.keys();

while (keys.hasNext()) {

String key = (String) keys.next();

map.put(key, fromJson(object.get(key)));

}

return map;

}

public static List toList(JSONArrayarray) throwsJSONException {

List list = new ArrayList();

for (int i = 0; i 

list.add(fromJson(array.get(i)));

}

return list;

}

privatestaticObject fromJson(Object json)throws JSONException {

if (json == JSONObject.NULL) {

return null;

} else if (json instanceof JSONObject) {

returntoMap((JSONObject) json);

} else if (json instanceof JSONArray) {

returntoList((JSONArray) json);

} else {

return json;

}

}

}

第一个layout

[html]

view plain

copy

print

?

activity_list_view.xml

android:id="@+id/LinearLayout01"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android">

android:layout_height="wrap_content"

android:id="@+id/MyListView">

第二个layout(自己新建的)

my_listitem.xml

[html]

view plain

copy

print

?

android:layout_width="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_height="wrap_content"

android:id="@+id/MyListItem"

android:paddingBottom="3dip"

android:paddingLeft="10dip">

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:id="@+id/edit01"/>"

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:id="@+id/edit02"/>

[Activity之间使用Parcel传递大量数据产生的问题。Activity之间通过intent传递大量数据,导致新Activity无法启动。Activity之间数据传递方式总结参考 这 里。比较常用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值