2017-08-10 19 views
0

私はRetrofit 2を使用しています。http://ip.jsontest.com/でテスト用JSONを使用しています。なぜこのエラーが発生するのですか?

私はこのERRORも持っていますが、私は非常に大きなJSONを持っているからです。そして、私はあなたのテストJSONを使用します。必要HELP))これはJSON

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

ある

{ "IP": "54.196.188.78" }

マイインタフェース

public interface UmoriliApi { 
    @GET(".") 
    Call<List<Test>> getData(); 
} 

私のテストクラス

public class Test { 
    @SerializedName("ip") 
    @Expose 
    private String ip; 

    public String getIp() { 
     return ip; 
    } 
    public void setIp(String ip) { 
     this.ip = ip; 
    } 
} 

マイAPIクラス

public class App extends Application { 

    private static UmoriliApi umoriliApi; 
    private Retrofit retrofit; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     retrofit = new Retrofit.Builder() 
       .baseUrl("http://ip.jsontest.com/") 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     umoriliApi = retrofit.create(UmoriliApi.class); 
    } 

    public static UmoriliApi getApi() { 
     return umoriliApi; 
    } 
} 

マイMainActivityクラス

public class MainActivity extends AppCompatActivity { 

    private static final String TAG = "TAG"; 
    List<Test> posts; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     posts = new ArrayList<>(); 

     App.getApi().getData().enqueue(new Callback<List<Test>>() { 
      @Override 
      public void onResponse(Call<List<Test>> call, Response<List<Test>> response) { 
       posts.addAll(response.body()); 
       Log.d(TAG, "onResponse: "+posts.size()); 
      } 

      @Override 
      public void onFailure(Call<List<Test>> call, Throwable t) { 
       Log.d(TAG, "onFailure: "); 
      } 
     }); 
    } 
} 
+0

@GET( "。") コール getData();このコードを変更しました – Akash

+0

@Akashありがとうございます。しかし、どのように私はテストのリストを取得できますか? posts.addAll(response.body()); –

答えて

2

は、基本的には、期待と配列がありますが、JSONオブジェクトを受け取っています。

Akashさんがコメントで言ったように:

Call<List<Test>> getData();

List<Test>は、あなたが期待して配列したときに書いたものです。オブジェクトに対してCall<Test>と書く必要があります。

また、コールバックも変更する必要があります。

+0

ありがとうございます。私は@GET( "。")を呼び出しました。 getData();私はどのようにテストのリストを取得できますか? –

+2

@SergeyRokitskiy:JSONにはリストがありません。 1つのJSONオブジェクトを持っています。リストが必要な場合、WebサービスはJSONでフォーマットされたリストを返す必要があります。 – CommonsWare

関連する問題