Как получить конкретное значение данных JSON из URL? - PullRequest
0 голосов
/ 14 мая 2018

Я не могу получить конкретное значение из данных JSON. Допустим, у меня есть данные в формате JSON, например: https://api.thingspeak.com/channels/494244/fields/1.json?api_key=3O8HR1YR38GCGD31&results=1. Я могу получить данные JSON видимыми, но не могу получить нужные мне данные.

MainActivity

public class MainActivity extends AppCompatActivity {
public static Button click;
public static TextView data;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    click = (Button) findViewById(R.id.button);
    data=(TextView) findViewById(R.id.fetcheddata);

    click.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fetchData process=new fetchData();
            process.execute();

класс fetchData

public class fetchData extends AsyncTask<Void,Void,Void> {
String data="";
int dataParsed=0;
String singleParsed="";
String entryId="";
@Override
protected Void doInBackground(Void... voids) {
    try {
        URL url=new URL("https://api.thingspeak.com/channels/494244/fields/1.json?api_key=3O8HR1YR38GCGD31&results=2");

        HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
        InputStream inputStream=httpURLConnection.getInputStream();
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
        String line="";
        while(line!=null){
            line=bufferedReader.readLine();
            data=data+line;
        }
        JSONObject object=new JSONObject(data);
        JSONObject feeds=object.getJSONObject("feeds");
        entryId = feeds.getString("entry_id");

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    MainActivity.data.setText(this.entryId
    );

Пожалуйста, помогите, как я мог получить конкретное значение. Например, "entry_id" в массиве каналов в ссылке на данные JSON, которую я предоставил. Заранее спасибо

1 Ответ

0 голосов
/ 14 мая 2018

Ну ... feeds это массив, а не объект.Поэтому вам нужно изменить:

object.getJSONObject("feeds")

на:

JSONArray jsonArray = object.getJSONArray("feeds")

Наконец, чтобы иметь возможность получить entry_id

jsonArray.getInt("entry_id")

Вам нужночтобы проверить тип того, что вы хотите получить из JSON, и использовать соответствующий метод get.

Редактировать:

Извините, поскольку это массив, у вас естьчтобы пройти через это ... что-то вроде этого:

for (int i = 0; i < jsonArray().length(); i++ { jsonArray.getJSONObject(i).getInt("entry_id"); }
...