2011-09-24 104 views
0

我有一個問題,我有一個可設置並獲取多個列表的序列化類。我添加了一個列表,但是當我想從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)); 
     } 
+0

什麼在ShowMyOrders線87? –

回答

0

幾點需要注意:

Parse_Json類:

List<String> IBXId; 

IBXID從未intiallized所以它是null

所以後來當它試圖將值添加到IBXId

IBXId.add(j_data.getString("id")); 

,這將拋出一個NullPointerException。

但是如果你的JSONArray jo = ja.getJSONArray("ibx");回報大小0jo,行

ibx.setIBXId(IBXId); 

將設置IBXId爲null

在下面的代碼:

ibId = ibx.getIBXId();  

    for(int i=0;i<6;i++) 
    { 
     System.out.println("The IBX ID:"+ibId.get(i)); 
    } 

ibIdnull因爲在BaseIBXValues類,行

private List<String> IBXId; 

犯規初始化IBXId,所以它的價值是null所以調用ibId.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 

但是當你打電話給getter

ibId = ibx.getIBXId();  

    for(int i=0;i<6;i++) 
    { 
     System.out.println("The IBX ID:"+ibId.get(i)); 
    } 

,你可以確保你有一個非空值

ibId = ibx.getIBXId(); 
If(ibId != null) { 
    for(String index : ibId) 
    { 
     System.out.println("The IBX ID:"+index); 
    } 
} 

編輯

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); 
      } 
     } 

編輯: 這應該是:

public class BaseIBXValues implements Serializable{ 

    private static final long serialVersionUID = 7526472295622776147L; 
    private List<String> IBXId = new ArrayList<String>(); // initialize to empty array of string 
    private List<String> IBXName; 

當創建新的對象BaseIBXValues

ibx = new BaseIBXValues(); 
ibId = ibx.getIBXId(); 

ibId應該是字符串的空數組

+0

在列表變量中分配空值後問題保持不變。 –

+0

將方法調用爲設置爲null的對象將導致NullPointerException。您必須初始化爲新的ArrayList (); – ccheneson

+0

IBId在getter調用中返回Null。它將如何解決? –