Android 从类获取列表时出错

Android 从类获取列表时出错,android,Android,我有一个问题,我有一个可序列化的类,它设置并获取多个列表。我在其中添加了一个列表,但当我想从getter方法获取该列表时,它会返回NullPointerException。这就是为什么我在这里提到了错误和Setter以及Getter方法来解释这个问题以及我是如何检索它的。我不知道为什么,也不知道如何删除它?有人能帮我解决这个问题吗 错误堆栈: 09-24 13:04:18.923: ERROR/AndroidRuntime(529): FATAL EXCEPTION: main 09-24 13

我有一个问题,我有一个可序列化的类,它设置并获取多个列表。我在其中添加了一个列表,但当我想从getter方法获取该列表时,它会返回NullPointerException。这就是为什么我在这里提到了错误和Setter以及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));
        }   
设置和获取列表的类:

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)
,则getter
getIBXId()
将返回null;因此在循环执行
之前,您可能应该检查一些null值同上
Ya ccheneson,我已经添加了您的代码,但问题仍然是一样的。我建议使用调试器,一步一步地检查传递给
setIBXId
的对象的值。正如David Olsson所说,给出发生异常的行(在进行上述修改之前)