Android 从类获取列表时出错
我有一个问题,我有一个可序列化的类,它设置并获取多个列表。我在其中添加了一个列表,但当我想从getter方法获取该列表时,它会返回NullPointerException。这就是为什么我在这里提到了错误和Setter以及Getter方法来解释这个问题以及我是如何检索它的。我不知道为什么,也不知道如何删除它?有人能帮我解决这个问题吗 错误堆栈:Android 从类获取列表时出错,android,Android,我有一个问题,我有一个可序列化的类,它设置并获取多个列表。我在其中添加了一个列表,但当我想从getter方法获取该列表时,它会返回NullPointerException。这就是为什么我在这里提到了错误和Setter以及Getter方法来解释这个问题以及我是如何检索它的。我不知道为什么,也不知道如何删除它?有人能帮我解决这个问题吗 错误堆栈: 09-24 13:04:18.923: ERROR/AndroidRuntime(529): FATAL EXCEPTION: main 09-24 13
09-24 13:04:18.923: ERROR/AndroidRuntime(529): FATAL EXCEPTION: main
09-24 13:04:18.923: ERROR/AndroidRuntime(529): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.equinix.android.common/com.equinix.android.showmyorders.ShowMyOrders}: java.lang.NullPointerException
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.os.Handler.dispatchMessage(Handler.java:99)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.os.Looper.loop(Looper.java:123)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at java.lang.reflect.Method.invokeNative(Native Method)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at java.lang.reflect.Method.invoke(Method.java:521)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at dalvik.system.NativeStart.main(Native Method)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): Caused by: java.lang.NullPointerException
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.equinix.android.showmyorders.ShowMyOrders.onCreate(ShowMyOrders.java:87)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): ... 11 more
package com.equinix.android.model;
import java.io.Serializable;
import java.util.List;
public class BaseIBXValues implements Serializable{
private static final long serialVersionUID = 7526472295622776147L;
private List<String> IBXId;
private List<String> IBXName;
private List<String> IBXNaturalKey;
public List<String> getIBXId()
{
return IBXId;
}
public void setIBXId(List<String> IBXId)
{
this.IBXId = IBXId;
}
public List<String> getIBXName()
{
return IBXName;
}
public void setIBXName(List<String> IBXName)
{
this.IBXName = IBXName;
}
public List<String> getIBXNaturalKey()
{
return IBXNaturalKey;
}
public void setIBXNaturalKey(List<String> IBXNaturalKey)
{
this.IBXNaturalKey = IBXNaturalKey;
}
}
**Code for Setting the value of arraylist:**
public class Parse_Json {
String json_String;
List<String> IBXId;
BaseIBXValues ibx;------> It is the class where setter and getter mentioned
public Parse_Json(String json_String)
{
this.json_String = json_String;
}
public void parse()
{
ibx = new BaseIBXValues();
try{
JSONObject ja = new JSONObject(json_String);
JSONArray jo = ja.getJSONArray("ibx");
for(int i=0;i<jo.length();i++)
{
JSONObject j_data = jo.getJSONObject(i);
System.out.println("The id is:"+j_data.getString("id"));
IBXId.add(j_data.getString("id"));
LoginScreen.id.add(j_data.getString("id"));
System.out.println("The Name is:"+j_data.getString("name"));
LoginScreen.name.add(j_data.getString("name"));
System.out.println("The naturalKey is:"+j_data.getString("naturalKey"));
LoginScreen.naturalKey.add(j_data.getString("naturalKey"));
}
}catch(Exception e)
{
e.printStackTrace();
}
ibx.setIBXId(IBXId);------------> set the list
}
ibx = new BaseIBXValues();
ibId = ibx.getIBXId();
for(int i=0;i<6;i++)
{
System.out.println("The IBX ID:"+ibId.get(i));
}
设置和获取列表的类:
09-24 13:04:18.923: ERROR/AndroidRuntime(529): FATAL EXCEPTION: main
09-24 13:04:18.923: ERROR/AndroidRuntime(529): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.equinix.android.common/com.equinix.android.showmyorders.ShowMyOrders}: java.lang.NullPointerException
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.os.Handler.dispatchMessage(Handler.java:99)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.os.Looper.loop(Looper.java:123)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at java.lang.reflect.Method.invokeNative(Native Method)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at java.lang.reflect.Method.invoke(Method.java:521)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at dalvik.system.NativeStart.main(Native Method)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): Caused by: java.lang.NullPointerException
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.equinix.android.showmyorders.ShowMyOrders.onCreate(ShowMyOrders.java:87)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): ... 11 more
package com.equinix.android.model;
import java.io.Serializable;
import java.util.List;
public class BaseIBXValues implements Serializable{
private static final long serialVersionUID = 7526472295622776147L;
private List<String> IBXId;
private List<String> IBXName;
private List<String> IBXNaturalKey;
public List<String> getIBXId()
{
return IBXId;
}
public void setIBXId(List<String> IBXId)
{
this.IBXId = IBXId;
}
public List<String> getIBXName()
{
return IBXName;
}
public void setIBXName(List<String> IBXName)
{
this.IBXName = IBXName;
}
public List<String> getIBXNaturalKey()
{
return IBXNaturalKey;
}
public void setIBXNaturalKey(List<String> IBXNaturalKey)
{
this.IBXNaturalKey = IBXNaturalKey;
}
}
**Code for Setting the value of arraylist:**
public class Parse_Json {
String json_String;
List<String> IBXId;
BaseIBXValues ibx;------> It is the class where setter and getter mentioned
public Parse_Json(String json_String)
{
this.json_String = json_String;
}
public void parse()
{
ibx = new BaseIBXValues();
try{
JSONObject ja = new JSONObject(json_String);
JSONArray jo = ja.getJSONArray("ibx");
for(int i=0;i<jo.length();i++)
{
JSONObject j_data = jo.getJSONObject(i);
System.out.println("The id is:"+j_data.getString("id"));
IBXId.add(j_data.getString("id"));
LoginScreen.id.add(j_data.getString("id"));
System.out.println("The Name is:"+j_data.getString("name"));
LoginScreen.name.add(j_data.getString("name"));
System.out.println("The naturalKey is:"+j_data.getString("naturalKey"));
LoginScreen.naturalKey.add(j_data.getString("naturalKey"));
}
}catch(Exception e)
{
e.printStackTrace();
}
ibx.setIBXId(IBXId);------------> set the list
}
ibx = new BaseIBXValues();
ibId = ibx.getIBXId();
for(int i=0;i<6;i++)
{
System.out.println("The IBX ID:"+ibId.get(i));
}
package com.equinix.android.model;
导入java.io.Serializable;
导入java.util.List;
公共类BaseIBXValues实现可序列化{
私有静态最终长serialVersionUID=752647295622776147L;
私有列表IBXId;
私有列表IBXName;
私有列表IBXNaturalKey;
公共列表getIBXId()
{
返回IBXId;
}
公共void setIBXId(列表IBXId)
{
this.IBXId=IBXId;
}
公共列表getIBXName()
{
返回IBXName;
}
公共无效集合IBXName(列表IBXName)
{
this.IBXName=IBXName;
}
公共列表getIBXNaturalKey()
{
返回IBXNaturalKey;
}
公共无效设置IBXNaturalKey(列出IBXNaturalKey)
{
this.IBXNaturalKey=IBXNaturalKey;
}
}
**用于设置arraylist值的代码:**
公共类Parse_Json{
字符串json_字符串;
列出IBXId;
BaseIBXValues ibx;------>它是setter和getter提到的类
公共解析_Json(字符串Json_字符串)
{
this.json_String=json_String;
}
公共空解析()
{
ibx=新的BaseIBXValues();
试一试{
JSONObject ja=新的JSONObject(json_字符串);
JSONArray jo=ja.getJSONArray(“ibx”);
对于(int i=0;我设置了列表
}
从Getter获取列表:
09-24 13:04:18.923: ERROR/AndroidRuntime(529): FATAL EXCEPTION: main
09-24 13:04:18.923: ERROR/AndroidRuntime(529): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.equinix.android.common/com.equinix.android.showmyorders.ShowMyOrders}: java.lang.NullPointerException
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.os.Handler.dispatchMessage(Handler.java:99)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.os.Looper.loop(Looper.java:123)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at java.lang.reflect.Method.invokeNative(Native Method)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at java.lang.reflect.Method.invoke(Method.java:521)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at dalvik.system.NativeStart.main(Native Method)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): Caused by: java.lang.NullPointerException
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at com.equinix.android.showmyorders.ShowMyOrders.onCreate(ShowMyOrders.java:87)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-24 13:04:18.923: ERROR/AndroidRuntime(529): ... 11 more
package com.equinix.android.model;
import java.io.Serializable;
import java.util.List;
public class BaseIBXValues implements Serializable{
private static final long serialVersionUID = 7526472295622776147L;
private List<String> IBXId;
private List<String> IBXName;
private List<String> IBXNaturalKey;
public List<String> getIBXId()
{
return IBXId;
}
public void setIBXId(List<String> IBXId)
{
this.IBXId = IBXId;
}
public List<String> getIBXName()
{
return IBXName;
}
public void setIBXName(List<String> IBXName)
{
this.IBXName = IBXName;
}
public List<String> getIBXNaturalKey()
{
return IBXNaturalKey;
}
public void setIBXNaturalKey(List<String> IBXNaturalKey)
{
this.IBXNaturalKey = IBXNaturalKey;
}
}
**Code for Setting the value of arraylist:**
public class Parse_Json {
String json_String;
List<String> IBXId;
BaseIBXValues ibx;------> It is the class where setter and getter mentioned
public Parse_Json(String json_String)
{
this.json_String = json_String;
}
public void parse()
{
ibx = new BaseIBXValues();
try{
JSONObject ja = new JSONObject(json_String);
JSONArray jo = ja.getJSONArray("ibx");
for(int i=0;i<jo.length();i++)
{
JSONObject j_data = jo.getJSONObject(i);
System.out.println("The id is:"+j_data.getString("id"));
IBXId.add(j_data.getString("id"));
LoginScreen.id.add(j_data.getString("id"));
System.out.println("The Name is:"+j_data.getString("name"));
LoginScreen.name.add(j_data.getString("name"));
System.out.println("The naturalKey is:"+j_data.getString("naturalKey"));
LoginScreen.naturalKey.add(j_data.getString("naturalKey"));
}
}catch(Exception e)
{
e.printStackTrace();
}
ibx.setIBXId(IBXId);------------> set the list
}
ibx = new BaseIBXValues();
ibId = ibx.getIBXId();
for(int i=0;i<6;i++)
{
System.out.println("The IBX ID:"+ibId.get(i));
}
ibx=newbaseibxvalues();
同上=ibx.getIBXId();
对于(int i=0;i需要注意的几件事:
在Parse_Json
类中:
List<String> IBXId;
这将引发NullPointerException
但是如果您的JSONArray jo=ja.getJSONArray(“ibx”);
返回大小为0
的jo
,则行
ibx.setIBXId(IBXId);
private List<String> IBXId;
将IBXId
设置为空
在以下代码中:
ibId = ibx.getIBXId();
for(int i=0;i<6;i++)
{
System.out.println("The IBX ID:"+ibId.get(i));
}
不初始化IBXId
,因此它的值为null
,因此调用同上。get(i)
将导致NullPointerException
编辑
请参见此处修改的代码:
public class Parse_Json {
String json_String;
List<String> IBXId = new ArrayList<String>();
BaseIBXValues ibx;------> It is the class where setter and getter mentioned
已编辑
List<String> ibId=Collections.emptyList();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.showmyorders);
ibx = new BaseIBXValues();
ibId = ibx.getIBXId();
if(ibId != null) {
for(String index : ibId)
{
System.out.println("The IBX ID:"+index);
}
}
同上
应该是字符串的空数组ShowMyOrders中的第87行是什么?在列表变量中分配空值后,问题仍然存在。对设置为Null
的对象调用方法将导致NullPointerException。您必须初始化为new ArrayList();您必须在BaseIBXValues
类中初始化private List IBXId=new ArrayList();
。但请注意,如果使用setIBXId(null)
,则gettergetIBXId()
将返回null;因此在循环执行之前,您可能应该检查一些null值同上
Ya ccheneson,我已经添加了您的代码,但问题仍然是一样的。我建议使用调试器,一步一步地检查传递给setIBXId
的对象的值。正如David Olsson所说,给出发生异常的行(在进行上述修改之前)