当前位置: 代码迷 >> Android >> 怎么将解析到的json数据显示到listview中
  详细解决方案

怎么将解析到的json数据显示到listview中

热度:10   发布时间:2016-04-27 23:02:19.0
如何将解析到的json数据显示到listview中
服务器返回的json数据已经得到了,但是一直无法显示到listview中去,大家看下是什么原因
这是MainActivity的代码:
package com.json.testj;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity{
private static final int JSON = 1;
private ListView listView;
private Button button;
private Handler handler;
private ArrayList<Knowledge> list;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.button);
listView = (ListView)findViewById(R.id.question_knowledge);

handler = new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
Bundle bundle = msg.getData();
String json = bundle.getString("json");
list = new ArrayList<Knowledge>();
if(msg.what==JSON){
list = JSONUtil.parseJson(json);
Log.i("list", list.toString());
}
}
};

button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getResult();
ListAdapter adapter = new ListAdapter(getBaseContext(), list);
listView.setAdapter(adapter);
}
});
}

public void getResult(){
final String uri = "http://www.yuerme.com:8181/client/lore/queryLore.do?uid=";
new Thread(new Runnable() {
@Override
public void run() {
Bundle bundle = new Bundle();
String str = HttpUtils.getJsonContent(uri);
bundle.putString("json", str);
Message msg = new Message();
msg.setData(bundle);
msg.what=JSON;
handler.sendMessage(msg);
}
}).start();
}
}

这是获取json数据的代码:
package com.json.testj;

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONUtil {
public static ArrayList<Knowledge> parseJson(String jsonString){
ArrayList<Knowledge> list = new ArrayList<Knowledge>();
Knowledge knowledge = new Knowledge();
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonArray = jsonObject.getJSONArray("data");
for(int i=0;i<jsonArray.length();i++){
JSONObject item = jsonArray.getJSONObject(i);
String title = item.getString("title");
String content = item.getString("content");
knowledge.setTitle(title);
knowledge.setContent(content);
list.add(knowledge);
}
} catch (JSONException e) {
e.printStackTrace();
}
Log.i("result", "json数据获取成功");
return list;
}
}

------解决思路----------------------
getResult(); 这里你请求的数据 是异步的
程序会往下执行
ListAdapter adapter = new ListAdapter(getBaseContext(), list);
                listView.setAdapter(adapter);
所以你的ListView 是没有数据的

那两行代码应该放到 获取到数据  解析完 再添加到adapter中

if(msg.what==JSON){
                    list = JSONUtil.parseJson(json);
                    Log.i("list", list.toString());
                }
在这里面加上那两行代码吧
------解决思路----------------------
TextView  你写成了Textview  ,v 你小写了
------解决思路----------------------
值相同,是因为你的knowledge每次都是同一个对象。
new的语句放到循环里:
for(int i = 0; i < jsonArray.length(); i++) {
    Knowledge knowledge = new Knowledge();
    ……
    ……
}
  相关解决方案