gpt4 book ai didi

android - 无法使用 JSON 数据填充布局

转载 作者:行者123 更新时间:2023-11-30 01:56:51 25 4
gpt4 key购买 nike

我正在尝试通过遍历一些请求的 JSON 来填充我的布局(我使用 Retrofit )。

当我尝试手动填充布局时(如下所示),它显示正常:

Post post1 = new Post("1", "1", "This is a message.");

但是如果我尝试用请求的 JSON 数据填充它,布局不会被填充也不会显示在我的屏幕上。只有带有“这是一条消息”的布局。显示。

这是我的 fragment 的 onCreateView() 中的代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
ListView listView = (ListView) view.findViewById(R.id.listview_posts);

final ArrayList<Post> arrayOfUsers = new ArrayList<Post>();

// This works fine. It populates the layout as it should.
Post post1 = new Post("1", "1", "This is a message.");
arrayOfUsers.add(post1);

final RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.build();

final ApiEndpointInterface apiService = restAdapter.create(ApiEndpointInterface.class);

apiService.getJsonStuff(1, new Callback<PostData>() {

@Override
public void success(PostData postData, Response response) {

// This doesn't work either
Post post2 = new Post("1", "1", "This is a message2.");
arrayOfUsers.add(post2);

for (Post p : postData.data) {

// This does not work. The layout isn't populated nor does it display.
Post posty = new Post(p.getId(), p.getUserId(), p.getContent());
arrayOfUsers.add(posty);

// The JSON is being read correctly, since this prints out the right values.
Log.d("MESSAGE", p.getMessage());
}
}

@Override
public void failure(RetrofitError retrofitError) {
retrofitError.printStackTrace();
}
});

PostAdapter adapter = new PostAdapter(getActivity(), arrayOfUsers);
listView.setAdapter(adapter);

return view;
}

回调:

void getJsonStuff(@Path("user_id") int userId, Callback<PostData> response);

发布模型:

import java.util.ArrayList;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Post {

@Expose
private String id;
@SerializedName("user_id")
@Expose
private String userId;
@Expose
private String content;

public Post(String id, String userId, String content) {
this.id = id;
this.userId = userId;
this.content = content;
}

/**
*
* @return
* The id
*/
public String getId() {
return id;
}

/**
*
* @param id
* The id
*/
public void setId(String id) {
this.id = id;
}

/**
*
* @return
* The userId
*/
public String getUserId() {
return userId;
}

/**
*
* @param userId
* The user_id
*/
public void setUserId(String userId) {
this.userId = userId;
}

/**
*
* @return
* The content
*/
public String getContent() {
return content;
}

/**
*
* @param content
* The content
*/
public void setContent(String content) {
this.content= content;
}

}

PostData 模型:

import java.util.ArrayList;
import java.util.List;
import com.google.gson.annotations.Expose;

public class PostData {

@Expose
public Boolean success;
@Expose
public List<Post> data = new ArrayList<Post>();

/**
*
* @return
* The success
*/
public Boolean getSuccess() {
return success;
}

/**
*
* @param success
* The success
*/
public void setSuccess(Boolean success) {
this.success = success;
}

/**
*
* @return
* The data
*/
public List<Post> getData() {
return data;
}

/**
*
* @param data
* The data
*/
public void setData(List<Post> data) {
this.data = data;
}

}

最佳答案

在适合您的场景中 -> 您按顺序执行操作:创建 Post 对象 - 将其添加到列表 - 基于非空列表创建适配器 - 在列表中设置适配器。

在不起作用的情况下,您正在异步执行它们:创建空列表 - 触发数据请求(但还没有数据) - 创建适配器 - 在列表中设置适配器 - 在未来某个不确定的时刻数据到达。问题是,在这种情况下,适配器不知道有任何更改,因此您需要通知它(在 success 回调结束时):adapter.notifyDataSetChanged()

关于android - 无法使用 JSON 数据填充布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com