2016-06-13 2 views
0

Я пытаюсь реализовать Retrofit в своем приложении для связи с конечными точками моего сервера. У меня есть таблица в бэкенде под названием «Feature», в которой есть id: number, name: text и roomID: number fields. Я не понимаю, что я делаю неправильно. Я строго следил за документами Retrofit. Я получаю эту ошибку, когда я пытаюсь получить определенную функцию по идентификатору из моей базы данных я получаю эту ошибку:Ожидаемое BEGIN_ARRAY, но было BEGIN_OBJECT Android Json

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 + 
      '}'; 
} 
} 

Note : This issue can happen in any networking library which parses the JSON response and gives the final Java POJO back.

ответ

1

Я думаю, что ваш сервер отвечает массивом объектов Feature, но вы указали как свое Pojo, которое вызывает проблему.

Попробуйте использовать в качестве своего общего класса, который будет использоваться как pojo для JSON, ваша проблема должна быть решена.

+0

Благодарим за предложение! Я посмотрю, не решит ли он проблему :) –

+0

Это сработало! Спасибо! –

+1

Добро пожаловать. Я отредактирую ваш вопрос, так как это происходит с любой библиотекой, которая дает ответ в POJO :) –

0

Ваш класс объекта не отображается как ответ json, используйте Postman, чтобы получить ответ и вставить ответ here, чтобы получить правильные параметры в объекте.

Смежные вопросы