android gt里的List<Person> persons=new ArrayList<Person>(); 是什么意思?在使用sqlite数据库时用到的。

I have Looked around here on StackOverflow and the internet and tried a few things but all of them are giving me the same general problem.
I have an ArrayList that I create in one activity and then send it through (another activity or 2 others depending on the users choices) and in each activity (including the one that the arraylist is created in) has the user select a single button from a group. Upon selecting the button I have a listener that creates a simple string and then adds that String to the ArrayList, or at least that's what I want it to do.
I have tried using Serialized classes to pass the same list through all the activities it needs to go through
I have tried making a new ArrayList in each class, copying the one from the previous class that was sent via an intent.putExtra() and then received so it could be copied into a new arraylist to do the same thing until it gets to the final Activity.
I have tried to make sense of Parcleable implementation but It just seems like to much for me (I'm not to good at this right now).
All of these have given me the same NullPointerException whenever I try and use the .add() method of the ArrayList (or the .addAll() in terms of the second attempt to get this done.
Any suggestions along with explanations you would have to give to a beginner would be greatly appreciated! I can put code if needed!!
解决方案 First thing, you should use Parcelable, it is more efficient in this case.
Have a look at this link for the "why" :
Second, I'd do like this :
public class ActivityOne extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
Intent intent = new Intent(this, ActivityTwo.class);
ArrayList&Person& strings = new ArrayList&Person&(Arrays.asList(new Person("Bob"),new Person("Dude")));
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(ActivityTwo.PARCELABLE_KEY,strings);
intent.putExtras(bundle);
startActivity(intent);
public class ActivityTwo extends Activity {
public static final String PARCELABLE_KEY = "array_key";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
if (getIntent() != null) {
ArrayList&Person& persons = getIntent().getParcelableArrayListExtra(PARCELABLE_KEY);
Log.d("test", persons.toString());
public class Person implements Parcelable {
public String getName() {
public void setName(String name) {
this.name =
public Person() {
public Person(String name) {
this.name =
public int describeContents() {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
public static final Parcelable.Creator&Person& CREATOR = new Parcelable.Creator&Person&() {
public Person createFromParcel(Parcel source) {
return new Person(source);
public Person[] newArray(int size) {
return new Person[size];
private Person(Parcel in) {
this.name = in.readString();
Also, do not be afraid of Parcelables! and as good developper you should be lazy, then use a Parcelable generator such as:
just copy your POJO class(es) and generate (a Android studio plugin also exists)
Finally, don't forget that you can not pass unlimited data between 2 activities. You could also consider putting your data into a database.
I hope it helps.
本文地址: &
我环顾四周,这里计算器和互联网,并尝试了一些事情,但所有的人都给予我同样的普遍问题。
我有我创建一个活动,然后通过(另一种活动或2人取决于用户的选择),并在每个活动(包括ArrayList中创建了一个)发送了用户选择一个ArrayList从一组单独的按钮。当选择按钮,我有一个创建一个简单的字符串,然后将这个字符串到ArrayList侦听器,或者至少这是我想要做的事。
我用序列化类通过所有它需要通过活动传递相同的列表尝试
我试图使每个类一个新的ArrayList,复制从已通过 intent.putExtra()发送,然后收到了previous类之一因此它可以被复制到一个新的ArrayList做同样的事情,直到它到达最后的活动。
在我试图使 Parcleable 的实施意义,但它只是似乎想太多,我(我不擅长这一点现在)。
所有这些都给予我同样的 NullPointerException异常每当我尝试并使用。新增()的方法该ArrayList(或 .addAll()在第二次尝试获得这个方面做了。
随着解释任何建议,你就必须给初学者将大大AP preciated!如果需要,我可以把code!
解决方案 第一件事情,你应该使用 Parcelable ,正是在这样的情况下,更有效。
看看这个链接的“为什么”:
二,我会做这样的:
公共类ActivityOne延伸活动{
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_one);
意向意图=新的意图(这一点,ActivityTwo.class);
ArrayList的<人>串=新的ArrayList<人>(Arrays.asList(新的Person(“鲍勃”),新的人(“好家伙”)));
束束=新包();
bundle.putParcelableArrayList(ActivityTwo.PARCELABLE_KEY,字符串);
intent.putExtras(包);
startActivity(意向);
公共类ActivityTwo延伸活动{
公共静态最后弦乐PARCELABLE_KEY =“array_key”;
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_two);
如果(getIntent()!= NULL){
ArrayList的<人>人= getIntent()getParcelableArrayListExtra(PARCELABLE_KEY)。
Log.d(“测试”,persons.toString());
公共类Person实现Parcelable {
私人字符串名称;
公共字符串的getName(){
公共无效setname可以(字符串名称){
this.name =名称;
公众人物(){
公众人物(字符串名称){
this.name =名称;
公众诠释describeContents(){
公共无效writeToParcel(包裹DEST,INT标志){
dest.writeString(this.name);
公共静态最终Parcelable.Creator<人> CREATOR =新Parcelable.Creator<人>(){
公众人物createFromParcel(宗源){
返回新的Person(源);
公众人物[] newArray(INT尺寸){
返回新的Person【尺寸】;
私募人士(包裹中){
this.name = in.readString();
另外,不要害怕parcelables的了!和好developper你应该偷懒,然后用Parcelable发生器,如:
只需复制你的POJO类(ES)和生成(一款Android Studio插件也存在)
最后,不要忘记,你不能2活动之间传递无限的数据。你也可以考虑将你的数据到数据库中。
我希望它能帮助。
本文地址: &
扫一扫关注官方微信android操作XML的几种方法总结
字体:[ ] 类型:转载 时间:
在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等。其中DOM的方式,可能是大家最熟悉的,也是符合W3C标准的
XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现。其标准型,可靠性,安全性......毋庸置疑。在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml数据格式和xml文件。
小提示:android中存储数据一般有如下几种:SharedPreferences(参数化),XML文件,sqllite数据库,网络,ContentProvider(内容提供者)等。
在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等。其中DOM的方式,可能是大家最熟悉的,也是符合W3C标准的。
在java平台中,有诸如DOM4J这样优秀的开源包,极大程度的方便大家使用DOM标准来操作XML文件。在javascript中,不同的浏览器解析引擎,对DOM的解析和操作也略有差异(不过这不是本章介绍的重点)。而DOM的方式,也有其缺点。通常一次性加载xml文件,再使用DOM的 api去进行解析,这样很大程度的消耗内存,对性能会有一定影响。而我们的android手机,虽然配置在不断的升级,但是内存方面,暂时还无法与传统的PC去媲美。所以,在android上面,不太推荐使用DOM的方式来解析和操作XML。 代码如下:package cn.itcast.
import java.io.InputSimport java.util.ArrayLimport java.util.L
import javax.xml.parsers.DocumentBimport javax.xml.parsers.DocumentBuilderF
import org.w3c.dom.Dimport org.w3c.dom.Eimport org.w3c.dom.Nimport org.w3c.dom.NodeL
import cn.itcast.model.P
public class DomPersonService {
& public List&Person& getPersons(InputStream stream) throws Throwable& {&& List&Person& list =new ArrayList&Person&();&& DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();&& DocumentBuilder builder =factory.newDocumentBuilder();&&Document dom = builder.parse(stream);//解析完成,并以dom树的方式存放在内存中。比较消耗性能&& //开始使用dom的api去解析&& Element root = dom.getDocumentElement();//根元素&&NodeList personNodes = root.getElementsByTagName("person");//返回所有的person元素节点&&//开始遍历啦&&for(int i=0;i&personNodes.getLength();i++)&&{&&&Person person =new Person();&&Element personElement =(Element)personNodes.item(i);&&& person.setId(new Integer( personElement.getAttribute("id")));//将person元素节点的属性节点id的值,赋给person对象&&& NodeList personChildrenNodes =personElement.getChildNodes();//获取person节点的所有子节点&&& //遍历所有子节点&&& for(int j=0;j&personChildrenNodes.getLength();j++)&&& {&&&& //判断子节点是否是元素节点(如果是文本节点,可能是空白文本,不处理)&&&& if(personChildrenNodes.item(j).getNodeType()==Node.ELEMENT_NODE)&&&& {&&&&& //子节点--元素节点&&&&& Element childNode =(Element)personChildrenNodes.item(j);&&&&&&&& if("name".equals(childNode.getNodeName()))&&&&&&&& {&&&&&& && //如果子节点的名称是“name”.将子元素节点的第一个子节点的值赋给person对象&&&&&& && person.setName(childNode.getFirstChild().getNodeValue());&&&&&&&& }else if("age".equals(childNode.getNodeValue()))&&&&&&&& { &&&&&& && person.setAge(new Integer(childNode.getFirstChild().getNodeValue()));&&&&&&&& }&&&& }&&& }&&& list.add(person);&&}&&& }}2)
SAX(Simple API for XML),是一个使用非常广泛的XML解析标准,通常使用Handler模式来处理XML文档,这种处理模式和我们平常习惯的理解方式很不同,身边也经常有一些朋友在刚接触SAX的时候会觉得理解起来有些困难。其实SAX并不复杂,只不过是换了一种思维方式,正如它的名字所表示的,为了让我们以更简单的方式来处理XML文档,下面我们就开始吧。 代码如下:package cn.itcast.
import java.io.InputSimport java.util.ArrayLimport java.util.L
import javax.xml.parsers.SAXPimport javax.xml.parsers.SAXParserF
import org.xml.sax.Aimport org.xml.sax.SAXEimport org.xml.sax.helpers.DefaultH
import cn.itcast.model.P
public class SAXPersonService {&& public List&Person& getPersons(InputStream inStream) throws Throwable&& {&&& SAXParserFactory factory = SAXParserFactory.newInstance();//工厂模式还是单例模式?&&& SAXParser parser =factory.newSAXParser();&&& PersonParse personParser =new PersonParse();&&& parser.parse(inStream, personParser);&&& inStream.close();&&& return personParser.getPerson();&& }&& private final class PersonParse extends DefaultHandler&& {&&private List&Person& list =&&& Person person =&&& private String tag=&&& public List&Person& getPerson() {&&&}&&& @Override&public void startDocument() throws SAXException {&&list =new ArrayList&Person&();&}
&@Override&public void startElement(String uri, String localName, String qName,&&&Attributes attributes) throws SAXException {&&if("person".equals(localName))&&{&&&//xml元素节点开始时触发,是“person”&&&person = new Person();&&&person.setId(new Integer(attributes.getValue(0)));&&}&&tag =localN//保存元素节点名称&}&@Override&public void endElement(String uri, String localName, String qName)&&&throws SAXException {&&//元素节点结束时触发,是“person”&&if("person".equals(localName))&&{&&&list.add(person);&&&person=&&}&&tag =//结束时,需要清空tag&&}&@Override&public void characters(char[] ch, int start, int length)&&&throws SAXException {&&if(tag!=null)&&{&&&String data = new String(ch,start,length);&&&& if("name".equals(tag))&&&& {&&&&& person.setName(data);&&&& }else if("age".equals(tag))&&&& {&&&&& person.setAge(new Integer(data));&&&& }&&&& }&}&& }}3)
Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析。 代码如下:package cn.itcast.
import java.io.InputSimport java.io.Wimport java.util.ArrayLimport java.util.L
import org.xmlpull.v1.XmlPullPimport org.xmlpull.v1.XmlS
import android.util.X
import cn.itcast.model.P
public class PullPersonService {&//保存xml文件&public static void saveXML(List&Person& list,Writer write)throws Throwable&{&&XmlSerializer serializer =Xml.newSerializer();//序列化&&serializer.setOutput(write);//输出流&&serializer.startDocument("UTF-8", true);//开始文档&&serializer.startTag(null, "persons");&&//循环去添加person&&for (Person person : list) {&&&serializer.startTag(null, "person");&&&serializer.attribute(null, "id", person.getId().toString());//设置id属性及属性值&&&serializer.startTag(null, "name");&&&serializer.text(person.getName());//文本节点的文本值--name&&&serializer.endTag(null, "name");&&&serializer.startTag(null, "age");&&&serializer.text(person.getAge().toString());//文本节点的文本值--age&&&serializer.endTag(null, "age");&&&serializer.endTag(null, "person");&&}&&serializer.endTag(null, "persons");&&serializer.endDocument();&&write.flush();&&write.close();&}& public List&Person& getPersons(InputStream stream) throws Throwable& {&& List&Person& list =&&&& Person person =&&&& XmlPullParser parser =Xml.newPullParser();&&&& parser.setInput(stream,"UTF-8");&&&& int type =parser.getEventType();//产生第一个事件&&&& //只要当前事件类型不是”结束文档“,就去循环&&&& while(type!=XmlPullParser.END_DOCUMENT)&&&& {&&&& switch (type) {&&case XmlPullParser.START_DOCUMENT:&&list =&new ArrayList&Person&();&&&
&&case XmlPullParser.START_TAG:&&&String name=parser.getName();//获取解析器当前指向的元素名称&&&if("person".equals(name))&&&{&&&&person =new Person();&&&&person.setId(new Integer(parser.getAttributeValue(0)));&&&}&&&if(person!=null)&&&{&&&&if("name".equals(name))&&&&{&&&&&person.setName(parser.nextText());//获取解析器当前指向的元素的下一个文本节点的文本值&&&&}&&&&if("age".equals(name))&&&&{&&&&&person.setAge(new Integer(parser.nextText()));&&&&}&&&}&&&&&case XmlPullParser.END_TAG:&&&if("person".equals(parser.getName()))&&&{&&&&list.add(person);&&&&person=&&&}&&&&&}&&&& type=parser.next();//这句千万别忘了哦&&&& }&&& }}下面是Model层的Person类的代码: 代码如下:package cn.itcast.
public class Person {private Ipublic Integer getId() {&}public void setId(Integer id) {&this.id =}
private Spublic String getName() {&}
public void setName(String name) {&this.name =}
private Ipublic Integer getAge() {&}
public void setAge(Integer age) {&this.age =}
public Person(){}public Person(Integer id, String name, Integer age) {&this.id =&this.name =&this.age =}
@Overridepublic String toString() {&return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具①集合为list
&s:checkboxlist name=&list& list=&{'Java','.Net','RoR','PHP'}& value=&{'Java','.Net'}& /&
&input type=&checkbox& name=&list&
①集合为list
&s:checkboxlist name="list" list="{'Java','.Net','RoR','PHP'}" value="{'Java','.Net'}" /&
&input type="checkbox" name="list" value="Java" checked="checked" /&&label&Java&/label&
&input type="checkbox" name="list" value=".Net" checked="checked" /&&label&.Net&/label&
&input type="checkbox" name="list" value="RoR" /&&label&RoR&/label&
&input type="checkbox" name="list" value="PHP" /&&label&PHP&/label&②集合为MAP
&s:checkboxlist name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"
listKey="key" listValue="value" value="{1,2,3}" /&
&input type="checkbox" name="map" value="1" checked="checked" /&&label&瑜珈用品&/label&
&input type="checkbox" name="map" value="2" checked="checked" /&&label&户外用品&/label&
&input type="checkbox" name="map" value="3" checked="checked" /&&label&球类&/label&
&input type="checkbox" name="map" value="4" /&&label&自行车&/label&③集合里存放javabean(id和name为Person的属性)
Person person1 = new Person(1, "小明");
Person person2 = new Person(2, "小红");
List&Person& list = new ArrayList&Person&();
list.add(person1);
list.add(person2);
request.setAttribute("persons", list);
request.setAtttibute("pchecked",person1);
&s:checkboxlist name="beans" list="#request.persons"
listKey="id" listValue="name" value="#request.pchecked.id" /&
&input type="checkbox" name="beans" value="1" checked="checked" /&&label&小明&/label&
&input type="checkbox" name="beans" value="2" /&&label&小红&/label&
二、Action中
可以定义集合或数组接收值,比如定义List&Integer&可以接收上面③传来的值。
原帖详细讲了radio和select的用法,地址:/view/caaeed9ad51f384.html
版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至: 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】数据库技术天团集体亮相,分享一线生产实践经验,告诉你踩过的坑、走过的路,都是老司机,靠谱!干货分享,不可错过!&&
是基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人...
消息队列(Message Queue,简称MQ)是阿里云商用的专业消息中间件,是企业级互联网架构的核心产品,基于...
阿里云移动APP解决方案,助力开发者轻松应对移动app中随时可能出现的用户数量的爆发式增长、复杂的移动安全挑战等...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
2017杭州云栖大会火热抢票
Loading...

我要回帖

更多关于 johnpersons合集 的文章

 

随机推荐