我有Android应用程序连接到MySQL数据库,一切正常与连接,但从数据库检索的数据是JSON格式,我使用此类进行连接:
public class CommunicatetoServer extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String response = "";
String url = params[0];
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(url);
HttpResponse getResponse = httpClient.execute(httpPost);
final int statusCode = getResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w(getClass().getSimpleName(),
"Error " + statusCode + " for URL " + url);
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
is = getResponseEntity.getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
Log.d("IO", e.getMessage().toString());
e.printStackTrace();
}
// return JSON String
return response;
}
protected void onPostExecute(String response)
{
//onPostExecute
Log.d("Server Response : ", response.toString());
Toast.makeText(context, response.toString(), Toast.LENGTH_LONG).show();
}
}
我这样申请:
private void GetComments() {
new CommunicatetoServer().execute(SERVER_URL + "GetComments.php");
}
上面的方法是从数据库中检索所有注释信息,它以这种方式出现(数据仅用于测试):
[{&#34; UNAME&#34;:&#34; TEST1&#34;&#34;标识&#34;:&#34; 1&#34;&#34;日期时间&#34 ;: &#34; 2015-03-04 00:00:00&#34;,&#34;评论&#34;:&#34;你好&#34;},{&#34; Uname&#34;:&#34 ; test3&#34;,&#34; Id&#34;:&#34; 1&#34;,&#34; DateTime&#34;:&#34; 2015-02-04 10:23:42&#34; ,&#34;评论&#34;:&#34; asdffgsdg asdf&#34;}]
那么如何将其转换为java对象?
谢谢。
答案 0 :(得分:1)
如果你想获得一个可以返回子节点等的JSONObject,你可以使用库JSON-Simple:
JSONObject obj = (JSONObject) new JSONParser().parse(jsonString);
答案 1 :(得分:1)
JSON对象以花括号开头和结尾,JSON数组以方括号开头和结尾。你有一个JSON数组。
如果要打印出来,则需要解析它。 JSON是键和值对。因此,例如"Uname":"test3"
Uname是关键,test3是值。
查看HashMaps的JSON数组。
以下是我从JSON Array iteration in Android/Java找到的示例:
HashMap<String, String> applicationSettings = new HashMap<String,String>();
for(int i = 0; i < settings.length(); i++){
String value = settings.getJSONObject(i).getString("value");
String name = settings.getJSONObject(i).getString("name");
applicationSettings.put(name, value);
}
答案 2 :(得分:0)
请允许我强烈建议您使用JSON - &gt; Java对象映射器,如gson。
这将允许您简单地在数据的序列化json表示和java对象模型之间进行映射。
首先定义您的模型类:
class Data {
String Uname;
Long Id;
String DateTime; // can convert to a Date using a TypeAdapter
String comment;
}
然后,使用gson将您的InputStream
解析为您的数据:
is = getResponseEntity.getContent();
Gson gson = new Gson();
List<Data> data = gson.fromJson(new BufferedReader(is), new TypeToken<ArrayList<Data>>() {}.getType());
现在,您可以使用java对象轻松地操作数据。
gson的文档可以在这里找到: