【发布时间】:2018-09-03 10:13:01
【问题描述】:
在列表视图中获取 API 数据的问题,
api 正在调用,但列表未显示在 listview 中,当我调试程序时,它运行到 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;
}
【问题讨论】:
-
请添加您遇到的错误/问题
-
@RavindraKushwaha 我没有收到任何错误,问题是 API 数据未显示在列表视图中
-
你需要客户适配器或微调器
-
不,我不需要微调器或自定义适配器,只需要列表中的数据
-
从 final String[] 中移除 final user = new String[userList.size()];因为用 final 初始化后就不能修改了。
标签: android android-studio listview