请教一下解析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,到底哪里的问题?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章