0

サーバーのエンドポイントと通信するために 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 を返すネットワーク ライブラリで発生する可能性があります。

4

2 に答える 2

1

サーバーは Feature オブジェクトの配列で応答すると思いますが、問題の原因となっている Pojo として指定しました。

JSON の pojo として使用される汎用クラスとして使用してみてください。問題は解決するはずです。

于 2016-06-13T16:37:50.763 に答える