我正在为link解析json,我想通过仅使用ArrayLists和Array Adapter在列表视图中解析后显示数据。
但我只获得了索引的最后一个值。
这是我的代码
JSONPARSE.java
public class JsonParse extends Activity {
ArrayList<contactsGS> contacts = new ArrayList<contactsGS>();
ListView lv_contacts;
InputStream is = null;
String jsonString;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json_parse);
lv_contacts = (ListView)findViewById(R.id.lv_jsonParse);
is = CommonUtilJson.getInputStream("http://api.androidhive.info/contacts/");
jsonString = CommonUtilJson.inputStreamToString(is);
ParseCode parse = new ParseCode(jsonString);
contacts=parse.parseValues();
ArrayAdapter adapter = new ArrayAdapter<contactsGS>(this, android.R.layout.simple_list_item_1,contacts);
lv_contacts.setAdapter(adapter);
}
public String getJsonSring(String api_url) throws URISyntaxException,
ClientProtocolException, IOException {
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
URL url = new URL(api_url);
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(),
url.getQuery(), null);
request.setURI(uri);
HttpResponse response = client.execute(request);
InputStream ips = response.getEntity().getContent();
BufferedReader buf = new BufferedReader(new InputStreamReader(ips));
StringBuilder sb = new StringBuilder();
String s;
while (true) {
s = buf.readLine();
if (s == null || s.length() == 0)
break;
sb.append(s);
}
buf.close();
ips.close();
return sb.toString();
}
finally {
// any cleanup code...
}
}
}
这是我解析代码的类。
PARSECODE.java
public class ParseCode {
String jsonString;
public static String url = "http://api.androidhive.info/contacts/";
ArrayList<contactsGS> contactsData = new ArrayList<contactsGS>();
ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String,String>>();
contactsGS gtrSeter = new contactsGS();
public ParseCode(String jsonString){
this.jsonString = jsonString;
}
JSONObject jsonObj = null;
public ArrayList<contactsGS> parseValues(){
try{
jsonObj = new JSONObject(jsonString);
JSONArray jsonArray = jsonObj.getJSONArray("contacts");
for(int index =0 ; index<jsonArray.length();index++){
JSONObject contacts = jsonArray.getJSONObject(index);
String id = contacts.getString("id");
gtrSeter.setId(id);
String name = contacts.getString("name");
gtrSeter.setName(name);
String email = contacts.getString("email");
gtrSeter.setEmail(email);
String address = contacts.getString("address");
gtrSeter.setAddress(address);
String gender = contacts.getString("gender");
JSONObject phoneObj = contacts.getJSONObject("phone");
String mobile = phoneObj.getString("mobile");
gtrSeter.setMobile(mobile);
String home = phoneObj.getString("home");
String office = phoneObj.getString("office");
contactsData.add(gtrSeter);
}
}
catch(Exception e){
e.printStackTrace();
}
return contactsData;
}
}
这是我的Getter Setter类
ContactGS.java
public class contactsGS {
public String id;
public String name;
public String email;
public String address;
public String mobile;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
private static contactsGS singletonObject;
public static contactsGS getSingletonObject(){
if(singletonObject==null){
singletonObject = new contactsGS();
}
return singletonObject;
}
}
请帮帮我。我想在列表视图的一行中获取一个人的详细信息。
提前致谢
答案 0 :(得分:3)
将每个contactGS添加到循环中的arraylist,在for循环中创建ContactGS
contactsGS gtrSeter = new contactsGS();
在for循环的末尾添加此行
contactsData.add(gtrSeter );
像这样
for(int index =0 ; index<jsonArray.length();index++){
contactsGS gtrSeter = new contactsGS();
JSONObject contacts = jsonArray.getJSONObject(index);
String id = contacts.getString("id");
gtrSeter.setId(id);
String name = contacts.getString("name");
gtrSeter.setName(name);
String email = contacts.getString("email");
gtrSeter.setEmail(email);
String address = contacts.getString("address");
gtrSeter.setAddress(address);
String gender = contacts.getString("gender");
JSONObject phoneObj = contacts.getJSONObject("phone");
String mobile = phoneObj.getString("mobile");
gtrSeter.setMobile(mobile);
String home = phoneObj.getString("home");
String office = phoneObj.getString("office");
contactsData.add(gtrSeter);
}
答案 1 :(得分:1)
请更改您的代码,如下所示。
在公共类ParseCode
中你定义了,只需在这里声明并在每次循环时初始化它。
contactsGS gtrSeter = new contactsGS();
随
改变contactsGS gtrSeter;
并在public ArrayList中使用parseValues()方法 in for循环写第一个语句。
gtrSeter = new contactsGS();
所以你的代码应该是这样的。
for(int index =0 ; index<jsonArray.length();index++){
gtrSeter = new contactsGS();
JSONObject contacts = jsonArray.getJSONObject(index);
.
.
.
.
.
.
.
}