проблема при получении данных в виде списка с помощью Android API вызова вызова - PullRequest
0 голосов
/ 03 сентября 2018

Ошибка при получении данных API в просмотре списка ,

API вызывает, но список не отображается в виде списка, когда я выводил программу, которая запускается до метода call.enque, после этой строки он прерывается на бросок в последней строке

я хочу получить этот ответ в своем ListView, но у меня возникла проблема, я не знаю, где я ошибаюсь

Это мой ответ Get API

{
"success": true,
"message": "",
"user": [
{
"id": 1,
"username": "Admin",
"email": "admin@gmail.com",
"role": "Administrator"
},
{
"id": 2,
"username": "Lawyer",
"email": "lawyer@gmail.com",
"role": "Lawyer"
},
{
"id": 3,
"username": "Driver",
"email": "driver@gmail.com",
"role": "Driver"
}
]
}

activity_main

  <ListView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/ls"/>

Класс интерфейса api.java

public interface api {
String BASE_URL = "https://efce0212.ngrok.io/api/";
@GET("user")
Call<List<User>> getHeroes();
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = findViewById(R.id.ls);
    getHeroes();
}

public void getHeroes() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(api.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    api api = retrofit.create(api.class);


    Call<List<User>> call = api.getHeroes();


    call.enqueue(new Callback<List<User>>() {
        @Override
        public void onResponse(Call<List<User>> call, Response<List<User>> response) {
            final List<User> userList = response.body();

            final String[] user = new String[userList.size()];

            for (int i = 0; i < userList.size(); i++) {


                user[i] = "Sucess:" + userList.get(i).getSucess() + "\n" + "message" + userList.get(i).getMessage() + "\n" + userList.get(i).getUserData();
            }

            listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, user));
        }

        @Override
        public void onFailure(Call<List<User>> call, Throwable t) {

            Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();

        }
    });
}
}

Pojo USER.JAVA

public class User {
private String sucess;
private String message;
public UserData[] userData;

//UserData  userData  = new UserData();

public User(String sucess, String message, UserData[] userData) {
    this.sucess = sucess;
    this.message = message;
    //this.userData = userData;
    this.userData = userData;
}

public String getSucess() {
    return sucess;
}

public String getMessage() {
    return message;
}

public UserData[] getUserData() {
    return userData;
}
}

UserData.class

public class UserData {
public String  id;
public String name;
public String email;
public String role;
}

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Из того, что я вижу

{
"success": true,
"message": "",
"user": [
{
"id": 1,
"username": "Admin",
"email": "admin@gmail.com",
"role": "Administrator"
},
{
"id": 2,
"username": "Lawyer",
"email": "lawyer@gmail.com",
"role": "Lawyer"
},
{
"id": 3,
"username": "Driver",
"email": "driver@gmail.com",
"role": "Driver"
}
]
}

ваш ответ - User объект, но, как я вижу

call.enqueue(new Callback<List<User>>()

вы ожидаете список User s в качестве ответа, который не имеет смысла.

Я надеюсь, что изменение типа ответа call на User может это исправить. Как это:

Call<User> call = api.getHeroes();

call.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        ...
    }

    @Override
    public void onFailure(Call<User> call, Throwable t) {

       ...

    }
});
0 голосов
/ 03 сентября 2018

Вам необходимо добавить менеджер LinearLayout в свой список.

LinearLayoutManager layoutManager=new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
    listView.setLayoutManager(layoutManager);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...