一次从JSon文件中提取多个字段

时间:2019-04-10 12:32:35

标签: java android json

我正在开发一个简单的应用程序,该应用程序可以吸引JSon的某些字段,该字段实时告诉我确切的天气,而我只吸引了一个归档的字段,我问自己:是否可以提取更多内容?比当时的现场要多?

这是我解析Json的链接:

https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139

这是我的代码:

public class MainActivity extends AppCompatActivity {

Button btnHit;
TextView txtJson;
ProgressDialog pd;
ArrayMap<Integer, String> arrayMap = new ArrayMap<>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnHit = (Button) findViewById(R.id.btnHit);
    txtJson = (TextView) findViewById(R.id.tvJsonItem);

    btnHit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new JsonTask().execute("https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139");
        }
    });


}


public class JsonTask extends AsyncTask<String, String, String> {

    protected void onPreExecute() {
        super.onPreExecute();

        pd = new ProgressDialog(MainActivity.this);
        pd.setMessage("Please wait");
        pd.setCancelable(false);
        pd.show();
    }

    protected String doInBackground(String... params) {


        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try {
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();


            InputStream stream = connection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();
            String line = "";

            while ((line = reader.readLine()) != null) {
                buffer.append(line + "\n");
                Log.d("Response: ", "> " + line);

            }

            return buffer.toString();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (pd.isShowing()) {
            pd.dismiss();
        }


        try {
            JSONObject Object = new JSONObject(result);
            JSONArray arr = new JSONArray(Object.getString("weather"));


            for (int i = 0; i < arr.length(); i++) {
                JSONObject jsonPart = arr.getJSONObject(i);
                //txtJson.append("main: " + jsonPart.getString("main") + '\n');
                arrayMap.put(i, jsonPart.getString("main"));
                txtJson.append("main: " + arrayMap.get(i) + '\n');

            }
        } catch (JSONException e) {
            e.printStackTrace();
            //txtJson.setText(result);
        }

        //txtJson.setText(result);
    }
}
}

1 个答案:

答案 0 :(得分:1)

如果我理解正确,则要从天气数组中提取其他对象以及main

"weather": [
    {
      "id": 701,
      "main": "Mist",
      "description": "mist",
      "icon": "https://cdn.glitch.com/6e8889e5-7a72-48f0-a061-863548450de5%2F50n.png?1499366021876"
    }

如果这是要求,那么您可以像完成操作一样使用相同的过程,只是更改对象的名称。

arrayMap.put(i, jsonPart.getString("description"));

或 您可以使用gson一次转换pojo类中的对象。然后使用pojo的对象并访问数据。

希望有帮助。