2016-06-20 3 views
1

これをフォローしていたので、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だった。

+0

あなたがjsonデータを取得しようとしているリンクは、あなたのjsonと比較して異なるjsonを与えています。したがって、実際のjsonレスポンスごとにPOJOクラスを作成する必要があります。 – pRaNaY

答えて

0

を、thisリンク応答からは以下の通りです:

[ 
    { 
     "date":"11/8/2014", 
     "auther":"nirav kalola", 
     "description":"json object parsing using gson library is easy", 
     "post_name":"json object parsing" 
    }, 
    { 
     "date":"12/8/2014", 
     "auther":"nirav kalola", 
     "description":"json array parsing using gson library", 
     "post_name":"json array parsing" 
    }, 
    { 
     "date":"17/8/2014", 
     "auther":"nirav kalola", 
     "description":"store json file in assets folder and get data when required", 
     "post_name":"json parsing from assets folder" 
    } 
] 

だから、あなたが必要以下のPOJOクラスを試してみてくださいGSONBuilderあなたの名前をと置き換えてください。BeanPost

import com.google.gson.annotations.SerializedName; 
public class BeanPost { 


@SerializedName("post_name") 
private String post_name; 
@SerializedName("auther") 
private String auther; 
@SerializedName("date") 
private String date; 
@SerializedName("description") 
private String description; 

public BeanPost(String post_name, String auther, String date, String description) { 
    this.post_name = post_name; 
    this.auther = auther; 
    this.date = date; 
    this.description = description; 
} 

public String getPost_name() { 
    return post_name; 
} 
public void setPost_name(String post_name) { 
    this.post_name = post_name; 
} 
public String getAuther() { 
    return auther; 
} 
public void setAuther(String auther) { 
    this.auther = auther; 
} 
public String getDate() { 
    return date; 
} 
public void setDate(String date) { 
    this.date = date; 
} 
public String getDescription() { 
    return description; 
} 
public void setDescription(String description) { 
    this.description = description; 
} 
} 

はPOJOクラスArrayListの上記のようbeanPostArrayListを作成してください。コードを試して、適切なフィールドを取得してください。

私はあなたに役立つことを願っています。

0

これを試してください。 応答から配列を作成します。

DoctorBean[] doctorBeanArray = new Gson().fromJson(response, DoctorBean[].class); // Where response is your string response 

その後のArrayListを作成します。あなたの与えられたtutorialを1として

ArrayList<DoctorBean> doctorBeanList = new ArrayList<DoctorBean>(Arrays.asList(doctorBeanArray)); 
関連する問題