請教一下解析json的問題

爲什麼我把json直接寫死了就能解析出對象來,而如果從網絡獲取他就顯示空指針?
這個是代碼

String json = "{\"recordcount\":4,\"data\":[{\"__type\":\"twr_api.ProfessionModel, twr_api\",\"profession_id\":0,\"profession_name\":\"未定\"},{\"profession_id\":100,\"profession_name\":\"醫生\"},{\"profession_id\":110,\"profession_name\":\"廣告設計師\"},{\"profession_id\":120,\"profession_name\":\"軟件開發\"}]}";
        Gson mgson = new Gson();
        JsonParser parser = new JsonParser();
        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
        JsonObject jsonObject = parser.parse(json).getAsJsonObject();
        JsonArray jsonArray = jsonObject.getAsJsonArray("data");
        Type type = new TypeToken<Map<String,String>>(){}.getType();
        for (int i = 1; i<jsonArray.size();i++){
            JsonElement element = jsonArray.get(i);
            Map<String,String> tmp = mgson.fromJson(element, type);
            list.add(tmp);
            System.out.println(tmp.get("profession_name"));
        }

如果我把json這麼寫死就能正常獲得


可是如果我換個方式,我的json我從網上獲得
這是從網上獲得的代碼:

public class Test extends Activity {
    private String URl = "http://120.26.196.99/twr_api/getallprofessions";
    private String json = "";
    private TextView txt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        txt = (TextView) findViewById(R.id.txt);
        StringRequest re = new StringRequest(URl, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                json = s;
                Log.v("這裏", json);
                txt.setText(s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        }){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String,String> mheader = new HashMap<String,String>();
                mheader.put("Accept","application/json");
                return mheader;
            }
        };
        ApplicationController.getInstance().addToRequestQueue(re);

        Gson mgson = new Gson();
        JsonParser parser = new JsonParser();
        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
        JsonObject jsonObject = parser.parse(json).getAsJsonObject();
        JsonArray jsonArray = jsonObject.getAsJsonArray("data");
        Type type = new TypeToken<Map<String,String>>(){}.getType();
        for (int i = 1; i<jsonArray.size();i++){
            JsonElement element = jsonArray.get(i);
            Map<String,String> tmp = mgson.fromJson(element, type);
            list.add(tmp);
            System.out.println(tmp.get("profession_name"));
        }
    }

}


他就會直接崩潰掉,錯誤信息就是 不是一個json對象:null,
而當我把string json = “”換成 string json;再運行他就是報on a null object reference?空對象?
我想不通了,因爲寫死的那個json是我用用網絡獲得的json複製粘貼過去的,也就是說他肯定是獲得了的,因爲用網絡的方法我註釋掉下面解析的那塊,能夠log出來我獲得的json,到底哪裏的問題?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章