2011-09-28 19 views
0

我有一個問題,我想從一個Serializable類設置和獲取Arraylists,但是當我們想要將Arraylist設置爲相同類時,它返回NullPointerException,我不'不知道爲什麼?請建議我爲正確的結果。空指針異常當想設置Serializable類中的值

錯誤堆棧:

09-28 11:30:20.422: ERROR/AndroidRuntime(511): java.lang.NullPointerException 
09-28 11:30:20.422: ERROR/AndroidRuntime(511):  at com.example.test.Test_serializableActivity.parse_json(Test_serializableActivity.java:88) 
09-28 11:30:20.422: ERROR/AndroidRuntime(511):  at com.example.test.Test_serializableActivity$2.run(Test_serializableActivity.java:55) 

代碼:插入值類

package com.example.test; 

import java.util.ArrayList; 

import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.widget.Toast; 

public class Test_serializableActivity extends Activity { 
    /** Called when the activity is first created. */ 

    public ArrayList<String> ibx_id = new ArrayList<String>(); 
    public ArrayList<String> ibx_name = new ArrayList<String>(); 
    public ArrayList<String> ibx_naturalKey = new ArrayList<String>(); 
    setIbx ibx; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     HttpPost post = new HttpPost("http://qa.mobile.equinix.com/eqixmobile/siteservice/um/ibx"); 

     try{ 
     StringEntity se = new StringEntity("{\"credentials\":{\"username\":\"mobileuser1\",\"password\":\"welcome1\"}}"); 
     final Service_Call obj = new Service_Call(post, se, "mobileuser1", "welcome1",false); 
     final ProgressDialog dialog = ProgressDialog.show(Test_serializableActivity.this, " EQUINIX     ", "Loading.... ", true); 

     final Handler handler = new Handler() { 

      public void handleMessage(Message msg) { 

        Intent intent = new Intent(Test_serializableActivity.this,GetIbx.class); 
        startActivity(intent); 
        dialog.dismiss(); 

       } 
      }; 

      final Thread checkUpdate = new Thread() { 

       public void run() { 
        ibx_name.clear(); 
        ibx_name.add("Select");          
        String json_string = obj.call_Service(); 
        // new Parse_Json(json_string).parse(); 
        parse_json(json_string); 
        handler.sendEmptyMessage(0); 
       } 
      }; 
      checkUpdate.start(); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public void parse_json(String json_string) 
    { 

     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")); 
       ibx_id.add(j_data.getString("id")); 
       System.out.println("The Name is:"+j_data.getString("name")); 
       ibx_name.add(j_data.getString("name")); 
       System.out.println("The naturalKey is:"+j_data.getString("naturalKey")); 
       ibx_naturalKey.add(j_data.getString("naturalKey")); 

      } 
      }catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
      ibx.setId(ibx_id);--------------->**NPE presents** 
      ibx.setName(ibx_name); 
      ibx.setNaturalKey(ibx_naturalKey); 
    } 
} 

獲得的價值類:

package com.example.test; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 

public class GetIbx extends Activity{ 

    ArrayAdapter<String> statusAdapter; 
    Spinner sp_ibx; 
    List<String> ibx_list = new ArrayList<String>(); 
    setIbx ibx; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.newmain); 

     ibx_list = ibx.getName(); 
     sp_ibx = (Spinner)findViewById(R.id.spinner1); 
     statusAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, ibx_list);//Sets an status adapter 
      statusAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

      sp_ibx.setAdapter(statusAdapter); 
    } 

} 

編輯:的getter/setter分類 -

package com.example.test; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

public abstract class setIbx implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    public List<String> id = new ArrayList<String>(); 
    public List<String> name = new ArrayList<String>(); 
    public List<String> naturalKey = new ArrayList<String>(); 

    public void setId(ArrayList<String> id) 
    { 
     this.id = id; 
    } 

    public List<String> getId() 
    { 
     return id; 
    } 
    public void setName(ArrayList<String> name) 
    { 
     this.name = name; 
    } 
    public List<String> getName() 
    { 
     return name; 
    } 
    public void setNaturalKey(ArrayList<String> naturalKey) 
    { 
     this.naturalKey = naturalKey; 
    } 
    public List<String> getNaturalKey() 
    { 
     return naturalKey; 
    } 

} 
+0

您是否在清單文件中添加了Internet權限? –

回答

1

你曾經顯示的代碼沒有設置在要麼ibx領域。就我所知,該字段將始終爲空。

請注意,這是不是與ArrayList一個問題 - 它是setIbx ibx場是零。我不清楚什麼setIbx類,即使,但我會專注於制定你如何期望這是非空的,而不是ArrayList領域。

也許它是作爲

ibx = new setIbx(); 
在構造函數

一份聲明中那麼簡單? (或在外地聲明?)我不是Android開發人員,所以我可能會脫離基地,但這是我認爲你應該看的。

+0

請參閱我編輯的Getter/Setter方法。 –

+0

@SanatPandey:儘管我可以看到 - 或者爲該領域設置了一個值,但仍然沒有創建* setIbx實例。你知道該字段的默認值爲空嗎? (你也應該重命名你的類遵循Java命名約定並且更具描述性,但這是一個單獨的問題。) –

+0

Ya我知道這是我的虛擬代碼,但我們不能創建一個抽象類的對象。 –