2016-07-13 5 views
-2

私はJSONを取得し、Retrofit 2.1を使用してArrayList<Manager>に解析しようとしています。Retrofit 2.1を使用してJSONからリストを取得

私は、GETリクエストとインタフェースを作成し、Retrofitも初期化しました。

なぜresponse.isSuccessful()がfalseですか?

JSON:

{ 
    "managers": 
[ 

    {"name": "John Smith", "plan": "100"}, 
    {"name": "Alex Sprite", "plan": "96"}, 
    {"name": "Den Bollom", "plan": "2"}, 
    {"name": "Jaromir Jagr", "plan": "68"}, 
    {"name": "Wane Gretzky", "plan": "99"}, 
    {"name": "Winsent Trade", "plan": "54"}, 
    {"name": "Paul Dagger", "plan": "30"}, 
    {"name": "Tommy Gun", "plan": "60"}, 
    {"name": "Luc Perry", "plan": "15"}, 
    {"name": "Tend Smarr", "plan": "64"} 


    ] 

    } 

インタフェースManagerAPI:

public interface ManagerAPI { 


    String URL = "https://api.myjson.com/bins/get/"; 



    @GET("xkyz.json") 
    Call <List<Manager>> getManagers(); 

} 

POJOクラス:

public class Manager { 

    @SerializedName("managers") 
    private ArrayList<Manager> managers; 


    public ArrayList<Manager> getManagers() { 
     return managers; 
    } 

    public void setManagers(ArrayList<Manager> managers) { 
     this.managers = managers; 
    } 


    public Manager() { 

    } 

    String name; 
    int plan; 


    public Manager(String name, int plan) { 
     this.name = name; 
     this.plan = plan; 
    } 


    public String getName() 
    { 
     return name; 
    } 

    public int getPlan() { 
     return plan; 
    } 
} 

InitRetrofit:

private void requestData() { 

    Retrofit retrofit = getRetrofit(); 
    ManagerAPI service = retrofit.create(ManagerAPI.class); 
    Call<List<Manager>> call = service.getManagers(); 
    call.enqueue(new Callback<List<Manager>>() { 
     @Override 
     public void onResponse(Call<List<Manager>> call, Response<List<Manager>> response) { 

      Log.e("OnResponce", "OK"); 
      if (response.isSuccessful()){ 
       List<Manager> managers = response.body(); 
      } 
      else Log.e("Response", "Not ok"); 
     } 

     @Override 
     public void onFailure(Call<List<Manager>> call, Throwable t) { 
      Log.e("OnFailure", "Fail"); 
     } 
    }); 

} 

@NonNull 
private Retrofit getRetrofit() { 
    return new Retrofit.Builder() 
       .baseUrl(ManagerAPI.URL) 
       .addConverterFactory(JacksonConverterFactory.create()) 
       .build(); 
} 

LOG:

07-13 20:43:34.762 5402-5402/ru.alexbykov.jsonexample E/OnResponce: OK 
07-13 20:43:34.762 5402-5402/ru.alexbykov.jsonexample E/Response Successful?: NO 
07-13 20:43:34.762 5402-5402/ru.alexbykov.jsonexample E/response.message: Not Found 
07-13 20:43:34.762 5402-5402/ru.alexbykov.jsonexample E/response.message: 404 
07-13 20:43:34.762 5402-5402/ru.alexbykov.jsonexample E/response.message: null 
07-13 20:43:34.978 5402-5469/ru.alexbykov.jsonexample E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9fd21c0 
+0

あなたのログ猫を見て、ここに貼り付けることはできますか?最新のものはエラーを教えてくれるはずです – Vasilisfoo

+0

@Vasilisfoo done –

+0

@newewsあなたは何か間違いを確認していますか?更新手続きの使用方法を教えてください。あなたの質問は私には分かりません。 – Soham

答えて

1

わかりましたので、ステップ1、私は余分な複雑さを避けるために、JSONレスポンスを変更します。つまり、ルート要素を削除して以下のようになります。私たちは単純で単純な配列を残しています。

[ 
    {"name": "John Smith", "plan": "100"}, 
    {"name": "Alex Sprite", "plan": "96"}, 
    {"name": "Den Bollom", "plan": "2"}, 
    {"name": "Jaromir Jagr", "plan": "68"}, 
    {"name": "Wane Gretzky", "plan": "99"}, 
    {"name": "Winsent Trade", "plan": "54"}, 
    {"name": "Paul Dagger", "plan": "30"}, 
    {"name": "Tommy Gun", "plan": "60"}, 
    {"name": "Luc Perry", "plan": "15"}, 
    {"name": "Tend Smarr", "plan": "64"} 
] 

ステップ2 POJOをクリーンアップします。 クラスManagerを呼び出しますが、モデルの内部にリストの管理者リストを含める方法が含まれています。重複しているか意図しないです。これらのものを下に落とす。

@SerializedName("managers") 
private ArrayList<Manager> managers; 


public ArrayList<Manager> getManagers() { 
    return managers; 
} 

public void setManagers(ArrayList<Manager> managers) { 
    this.managers = managers; 
} 
+0

答えをありがとう! が完了しました。 でも、 'response.isSuccessful()'はfalseです。 新しいJSON: https://api.myjson.com/bins/11p73 –

+0

OKを入力してください。getMessage() 'onFailure'内にあり、ここに投稿 – snkashis

+0

ログが更新されました。 'onResponse()'メソッドにエラーがあります。 'onFailure()'メソッドは呼び出されません。 –

関連する問題