【发布时间】: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