これをフォローしていたので、tutorialとなり、この方法があります。GSONを使用して解析されたデータを取得するには
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... voids) {
Reader reader=API.getData("http://beta.json-generator.com/api/json/get/DiIRBM4");
Type listType = new TypeToken<ArrayList<DoctorBean>>(){}.getType();
beanPostArrayList = new GsonBuilder().create().fromJson(reader, listType);
postList=new StringBuffer();
for(DoctorBean post: beanPostArrayList){
postList.append("\n heroName: "+post.getHeroName()+"\n realName: "+post.getRealName()+"\n\n");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.d("JSON Result ", postList.toString());
}
}.execute();
ログ結果には、これらの値のみが表示されます。
JSON結果:
heroName:ヌル本名:ヌル
heroName:ヌル本名:ヌル
heroName:ヌル本名:ヌル
これが私ですJSONデータ
[
{
"heroName": "Dr. Strange",
"realName": "Stephen Strange"
},
{
"heroName": "Spider-Man",
"realName": "Peter Paker"
},
{
"heroName": "Captain America",
"realName": "Stever Rogers"
}
]
これは私のデータモデル
import com.google.gson.annotations.SerializedName;
public class DoctorBean {
@SerializedName("heroName")
private String heroName;
@SerializedName("realName")
private String realName;
public DoctorBean(String heroName, String realName) {
this.heroName = heroName;
this.realName = realName;
}
public String getHeroName() {
return heroName;
}
public void setHeroName(String heroName) {
this.heroName = heroName;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
}
であり、これは
public class API {
private static Reader reader=null;
public static Reader getData(String SERVER_URL) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(SERVER_URL);
HttpResponse response = httpClient.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
reader = new InputStreamReader(content);
} else {
// Log.e("error:", "Server responded with status code: "+ statusLine.getStatusCode());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return reader;
}
}
私APIクラスである私は、ログの結果は3行を示したことに気づいたので、私はそれがあったことを考えていました配列の長さを正しく取得できます。しかし、データに関しては、すべてがnullだった。
あなたがjsonデータを取得しようとしているリンクは、あなたのjsonと比較して異なるjsonを与えています。したがって、実際のjsonレスポンスごとにPOJOクラスを作成する必要があります。 – pRaNaY