为什么我把json直接写死了就能解析出对象来,而如果从网络获取他就显示空指针?
这个是代码
如果我把json这么写死就能正常获得
可是如果我换个方式,我的json我从网上获得
这是从网上获得的代码:
他就会直接崩溃掉,错误信息就是 不是一个json对象:null,
而当我把string json = “”换成 string json;再运行他就是报on a null object reference?空对象?
我想不通了,因为写死的那个json是我用用网络获得的json复制粘贴过去的,也就是说他肯定是获得了的,因为用网络的方法我注释掉下面解析的那块,能够log出来我获得的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,到底哪里的问题?