サーバーのエンドポイントと通信するために Retrofit をアプリに実装しようとしています。バックエンドに、id: number、name: text、roomID:number フィールドを持つ「Feature」というテーブルがあります。私が間違っていることを理解していません。Retrofit のドキュメントに厳密に従っています。データベースから ID で特定の機能を取得しようとすると、このエラーが発生します。次のエラーが発生します。
IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
06-13 17:21:20.896 15174-15180/xdesign.georgi.espc_retrofit W/art: Suspending all threads took: 5.681ms
これは私の主な活動です:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GitHubService gitHubService = GitHubService.retrofit.create(GitHubService.class);
final Call<Feature> call = gitHubService.repoContributors(173);
call.enqueue(new Callback<Feature>() {
@Override
public void onResponse(Call<Feature> call, Response<Feature> response) {
Log.e("MainActivity","onResponce");
final TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(response.body().toString());
}
@Override
public void onFailure(Call<Feature> call, Throwable t) {
Log.e("MainActivity","onFailure" + t.toString());
final TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("Something went wrong: " + t.getMessage());
}
});
}
});
}
GitHutService.java
interface GitHubService {
@GET("Features/{id}")
Call<Feature> repoContributors(@Path("id") int id);
public static final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:3000/api/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
Feature.java
public class Feature {
String name;
int roomID;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRoomID() {
return roomID;
}
public void setRoomID(int roomID) {
this.roomID = roomID;
}
@Override
public String toString() {
return "Feature{" +
"name='" + name + '\'' +
", roomID=" + roomID +
'}';
}
}
注 : この問題は、JSON 応答を解析して最終的な Java POJO を返すネットワーク ライブラリで発生する可能性があります。