【问题标题】:How to fetch and display JSON data by id or name on screen (Android)如何通过屏幕上的 id 或名称获取和显示 JSON 数据(Android)
【发布时间】:2019-11-06 08:33:45
【问题描述】:

考虑:

      public RetroPhoto(Integer id, String email, String first_name, String last_name, String avatar) {
        this.id = id;
        this.email = email;
        this.first_name = first_name;
        this.last_name = last_name;
        this.avatar = avatar;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFirst_name() {
        return first_name;
    }

    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }

    public String getLast_name() {
        return last_name;
    }

    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
}

假设我在屏幕上有一个编辑文本和按钮。 我必须通过 JSON 数据按 ID 获取一个人的详细信息。

因此,当我将 id 键入为“1”时,它应该从按钮下方的 JSON 数据中以文本视图的形式显示该特定人员的详细信息。它的逻辑是什么?

以上是JSON。

【问题讨论】:

  • 分享你的json
  • 我已分享见上文

标签: android json android-edittext android-button


【解决方案1】:

如果要获取完整的 JSON 内容,则需要通过列表解析并获取与人员 ID 相关的 JSON 对象。

在onClick中,可以通过获取id

// Probably check if it's a valid number and non-empty
int id = parseInt(editTextId.getText().toString())

retrofitInstance.apiCall.enqueue ......
....
onResponse (){
    List<RetroPhoto> list = response.body();
    boolean idFound = false;
    for (int i=0; i< list.size(); i++) {
        if (list.get(i).getId() == id) {
            // You can get details of person here
            idFound = true;
        }
    }
    if (idFound == false) {
        // Toast invalid id message
    }
}
...

由于您使用的是Retrofit

【讨论】:

  • 私有静态最终字符串 BASE_URL = "api.myjson.com/bins"; // 我的基本网址。下面是我的界面 -- public interface GetDataService { @GET("14rw00") Call> getAllPhotos(); }
  • 如果我必须在textview中显示详细信息,我该如何显示它?textId.setText()?我应该在setText下写什么?
  • 我找到了...txt1.setText(list.get(i).getEmail());..非常感谢怪物大脑
  • 我还有最后一个问题...如何清除以前的 id 详细信息。看看我是否要显示另一个 id 详细信息。如何用新的(另一个)id 详细信息替换旧的?
  • 您已经看到我在 JSON 数据中只有 6 个 id ..当用户键入 id 为“7”而不是 6 个 id 时该怎么办????我应该如何验证
【解决方案2】:

当你得到你想要显示的值时,你可以使用它:

EditText mEdit;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mEdit = (EditText)findViewById(R.id.edittext);

    callAPI();
}

public void callAPI(){

   /** Do your API call and retrieve the value/id **/

   mEdit.setText("value from API")
}

【讨论】:

  • 如何获取 id?见我只有设计编辑文本和按钮。我没有写任何逻辑。我只描述了我上面的想法。你能更具体
  • 我不清楚你的代码。我已经在上面添加了我的json数据。base url和接口方法在“MONSTER BRAIN”评论部分请看一下
【解决方案3】:

首先要做的事情。您需要使用 Retrofit、Volley 等网络库通过 API 从服务器获取 JSON 内容。改造比 Volley 更快。使用 POST 方法将 id 发布到服务器,从 API 端,您需要根据该 id 获取数据并将其转换为 JSON 并发送回响应。

通过此链接了解更多详情。 https://square.github.io/retrofit

【讨论】:

  • 我正在使用改造。我不想要 POST 方法我想要 GET 方法。请阅读我上面我真正想要的描述
  • 我想要onClick(MainActivity)的实际逻辑。见我的项目中有我的实例方法和接口方法。
  • 我不清楚你的代码。我已经在上面添加了我的json数据。base url和接口方法在“MONSTER BRAIN”评论部分请看一下
  • 请添加您的改造电话,您在 onResponse 中实际上在做什么?
  • 我得到了解决方案...怪物大脑帮助....怪物大脑提供的上述代码是正确的......问题是他没有提供完整的代码......那些是可以理解的代码(改造 calll)....
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2011-11-18
  • 2012-05-15
  • 2013-03-09
  • 2022-11-27
  • 1970-01-01
相关资源
最近更新 更多