2017-08-10 121 views
0

我使用Retrofit 2.我在http://ip.jsontest.com/上使用測試JSON。它非常簡單JSON。爲什麼我會接受這個錯誤?

在實際的項目中,我也有這個錯誤,但我想,這是因爲我有非常大的JSON。我用你的測試JSON。需要幫助))

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

這是JSON

{ 「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對象。

由於阿卡什在評論說:

Call<List<Test>> getData();

List<Test>是當你想到和Array你寫的東西。您需要爲物體編寫Call<Test>測試

您還必須更改回調。

+0

謝謝。我改了@GET(「。」)調用 getData();我如何獲得測試列表? –

+2

@SergeyRokitskiy:您的JSON不包含*列表。它有一個JSON對象。如果你想要一個列表,你的Web服務需要返回一個用JSON格式化的列表。 – CommonsWare

相關問題