空指针异常当想要在Serializable Class中设置值时

时间:2011-09-28 06:13:53

标签: android

我有一个问题,我想设置并从Serializable类中获取Arraylists但是当我们想要将一个Arraylist设置为Same类时它会返回NullPointerException,我不知道为什么?请建议我正确的结果。

错误堆栈:

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)

代码:插入值Class

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

}

1 个答案:

答案 0 :(得分:1)

您显示的所有代码都没有在 类中设置ibx字段。据我所知,该字段将始终为null。

请注意,这不是ArrayList的问题 - 它是setIbx ibx字段,为null。我不清楚setIbx类甚至是什么,但我会集中精力研究你期望它是非空的而不是ArrayList字段。< / p>

可能就像

的陈述一样简单
ibx = new setIbx();

在你的构造函数中? (或者在现场声明中?)我不是Android开发人员,所以我可能会偏离基础,但这就是我认为你应该关注的。