Java 如何获取json字符串的值,然后通过此函数对其进行解析
我有以下方法将SS连接到db并返回一个json数组Java 如何获取json字符串的值,然后通过此函数对其进行解析,java,android,json,Java,Android,Json,我有以下方法将SS连接到db并返回一个json数组 private String getServerData(String returnString) { InputStream is = null; String result = ""; //the year data to send ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValu
private String getServerData(String returnString) {
InputStream is = null;
String result = "";
//the year data to send
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("year","1970"));
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(KEY_121);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
// JSONObject json_data = jArray.getJSONObject(i);
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","id: "+json_data.getInt("id")+
", name: "+json_data.getString("name")+
", sex: "+json_data.getInt("sex")+
", birthyear: "+json_data.getInt("birthyear")
);
//Get an output to the screen
returnString += "\n\t" + jArray.getJSONObject(i);
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
returnString += result.toString();
}
return returnString;
}
私有字符串getServerData(字符串返回字符串){
InputStream=null;
字符串结果=”;
//要发送的年度数据
ArrayList nameValuePairs=新的ArrayList();
名称值对。添加(新的基本名称值对(“年份”、“1970”);
//http post
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(键号121);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
is=entity.getContent();
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
//将响应转换为字符串
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8;
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
结果=sb.toString();
}捕获(例外e){
Log.e(“Log_标记”,“错误转换结果”+e.toString());
}
试一试{
JSONArray jArray=新JSONArray(结果);
对于(int i=0;i由于执行getServerData()
需要一段时间(它包含一个http请求),因此不能直接从UI线程运行它。(onCreate()
直接在UI线程上,UI线程永远不应该暂停)
这意味着您必须创建一个并从AsyncTask
的doInBackground()
调用getServerData()
。您可以在AsyncTask
的onPostExecute()
中返回显示JSON结果
这意味着您希望将结果显示位置的传递给AsyncTask
。您希望将其设置为SoftReference
,以防在获取JSON时发生问题(就像您离开活动一样)
我建议您阅读,并使用创建您自己的项目。一旦启动并运行了该项目,请将该图像下载程序修改为JSON下载程序。这篇文章应该对您非常有帮助,因为它还使用适配器在列表视图中显示项目
您的示例与本文中的示例在几个方面有所不同,但我认为它实际上更简单,因此,如果您对本文中的代码有足够的了解,那么您就可以在之后使代码正常工作
参考文献:
以下是我所做的,效果很好
1-我没有返回字符串,而是将结果原样返回给调用
然后我构建了一个字符串,然后我就可以像这样解析它了
returnedResult = this.getServerData(KEY_121);
try {
JSONArray jArray = new JSONArray(returnedResult);
for(int i=0;i<jArray.length();i++){
// JSONObject json_data = jArray.getJSONObject(i);
JSONObject json_data = jArray.getJSONObject(i);
hm = new HashMap<String, Object>();
hm.put(IDKEY, json_data.getInt("id"));
hm.put(NAMEKEY, json_data.getString("name"));
hm.put(IMGKEY, R.raw.android);
myBooks.add(hm);
}
returnedResult=this.getServerData(键121);
试一试{
JSONArray jArray=新JSONArray(returnedResult);
对于(inti=0;iHi-Peter),虽然建议不错,但我并不是在寻找答案。不过,我认为我已经接近解决这个问题了,如果可行的话,我会将其发布在这里。感谢有价值的链接
returnedResult = this.getServerData(KEY_121);
try {
JSONArray jArray = new JSONArray(returnedResult);
for(int i=0;i<jArray.length();i++){
// JSONObject json_data = jArray.getJSONObject(i);
JSONObject json_data = jArray.getJSONObject(i);
hm = new HashMap<String, Object>();
hm.put(IDKEY, json_data.getInt("id"));
hm.put(NAMEKEY, json_data.getString("name"));
hm.put(IMGKEY, R.raw.android);
myBooks.add(hm);
}