這個是代碼
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,到底哪裏的問題?