【问题标题】:Current value of EditText not being passed to a function from onCreate()EditText 的当前值未从 onCreate() 传递给函数
【发布时间】:2020-04-26 14:52:38
【问题描述】:

我正在构建一个显示印度 COVID19 统计数据的 android 应用,我从 https://api.covid19india.org/data.json 获取 JSON 格式的统计数据,此 API 也包含各个州的数据,

下面是我请求的 Json 数组(包含代表每个状态的 json 对象)的片段

现在我在屏幕上一次显示整个数据(所有状态),但是我想将状态名称作为输入并仅显示该状态的统计信息例如。在下图中代替示例,我想写一个状态名称,并且该状态的统计信息必须在单击按钮时显示。

这是 mainActivity.java 的代码,我正在使用 Volley 库从 API 中获取数据

public class MainActivity extends AppCompatActivity {
    private TextView result;
    private RequestQueue mq;
    public String value;
    int flag = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        result = findViewById(R.id.textView4);
        Button parse = findViewById(R.id.button);

        mq = Volley.newRequestQueue(this);
        EditText text = (EditText)findViewById(R.id.state_ip);
        value = text.getText().toString();

        parse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                jsonParse(value); 
                **//How do i pass 'value' i.e the state name entered by user to jsonParse**
            }
        });
    }

    private void jsonParse(final String value) {

        Log.d("val_state",value);
        String url = "https://api.covid19india.org/data.json";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("statewise");
                            for (int i = 0; i < jsonArray.length(); i++)
                            {
                                JSONObject st = jsonArray.getJSONObject(i);
                                String statename = st.getString("state");
                                String active = st.getString("active");
                                String confirmed = st.getString("confirmed");
                                String deaths = st.getString("deaths");
                                String recovered = st.getString("recovered");
                                if(statename.equals(value))
                                {
                                    flag= 1;
                                }

                                statename = "State : " + statename;
                                active = "Active Cases : " + active;
                                confirmed = "Confirmed Cases : " + confirmed;
                                deaths = "Total Deaths : " + deaths;
                                recovered = "Total Recovered : " + recovered;
                                if(flag==1)
                                {
                                    flag=0;
                                     result.append(statename + "\n" + String.valueOf(active) + "\n" + String.valueOf(confirmed) + "\n" + String.valueOf(deaths) + "\n" + String.valueOf(recovered) + "\n\n\n");
            } 
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        mq.add(request);
    }
}

在这里,我想将用户输入的状态值传递给 jsonParse() 方法,以便我使用接收到的 JSON 数据检查状态名称并将其附加到 TextView,但是当我这样做时,然后尝试记录 jsonParse() 方法中的值我什么也没得到,为什么会发生这种情况,我该如何实现上述内容?

【问题讨论】:

    标签: android json api android-layout android-volley


    【解决方案1】:

    您的 EditText 值已更新,必须在单击按钮后捕获。

    parse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                value = text.getText().toString();
                jsonParse(value);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2016-11-17
      • 2021-04-07
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多