リンクの 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;
}
}
これが私のゲッターセッタークラスです
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;
}
}
私を助けてください。リストビューの1行で1人の詳細を取得したい。
前もって感謝します