开发者社区 问答 正文

我如何在Android Studio的Json解析器中放置一些条件

这是我的json URL https://jsonplaceholder.typicode.com/todos我只想显示已完成:确实是正确的,我该怎么做?

MainActivity.java

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://jsonplaceholder.typicode.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);

Call<List<Post>> call = jsonPlaceHolderApi.getPosts();

call.enqueue(new Callback<List<Post>>() {
    @Override
    public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
        if (!response.isSuccessful()) {
            textresult.setText("Code: " + response.code());
            return;
        }
        List<Post> posts = response.body();
        for (Post post : posts) {
            String content = "";
            content += "User ID: " + post.getUserId() + "\n";
            content += "ID: " + post.getId() + "\n";
            content += " Title: " + post.getTitle() + "\n";
            content += "Completed: " + post.getCompleted() + "\n\n";

            textresult.append(content);

            if (post.getCompleted().contains("true")) {
                textresult.setPaintFlags(textresult.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
            }
        }
    }
    @Override
    public void onFailure(Call<List<Post>> call, Throwable t) {
        textresult.setText(t.getMessage());
    }
});

JsonPlaceHolderApi.java

public interface JsonPlaceHolderApi {

    @GET("todos")                

    Call<List<Post>> getPosts();       


}

Post.java

public class Post {

    private int userId;

    private int id;

    private String title;

    private String completed;

    public int getUserId() {
        return userId;
    }

    public int getId() {
        return id;
    }

    public String getTitle() {
        return title;
    }

    public String getCompleted() {
        return completed;
    }
}

当我尝试运行上面的代码时,我得到的输出为image,但是如果完成,则需要:true,应该删除。

展开
收起
几许相思几点泪 2019-12-16 20:27:22 552 分享 版权
阿里云 AI 助理回答

从你的描述来看,你希望在输出中只显示标记为已完成(completed: true)的事项,并且对于这些事项应用删除线样式。但是,目前你的代码逻辑是显示所有事项,并对已完成的事项文本应用删除线。为了仅显示已完成的事项,你需要在循环中添加一个条件来检查post.getCompleted()是否为"true",如果是,则进行处理并显示,否则跳过。以下是修改后的onResponse方法:

@Override
public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
    if (!response.isSuccessful()) {
        textresult.setText("Code: " + response.code());
        return;
    }
    List<Post> posts = response.body();
    for (Post post : posts) {
        // Only process and display if the task is completed
        if ("true".equals(post.getCompleted())) {
            String content = "";
            content += "User ID: " + post.getUserId() + "\n";
            content += "ID: " + post.getId() + "\n";
            content += "Title: " + post.getTitle() + "\n";
            content += "Completed: " + post.getCompleted() + "\n\n";

            // Apply strike-through to completed tasks
            SpannableStringBuilder ssb = new SpannableStringBuilder(content);
            StrikethroughSpan strikeThroughSpan = new StrikethroughSpan();
            ssb.setSpan(strikeThroughSpan, 0, content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            textresult.append(ssb);
        }
    }
}

这段修改后的代码通过在循环内部增加一个条件判断if ("true".equals(post.getCompleted()))来确保只有当completed字段为"true"时,才构建内容字符串并应用删除线样式后追加到textresult中。这样,输出将仅包含已完成的任务,并且每个任务标题都会带有删除线效果。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答