Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Studio中从JSON获取值_Android_Json_Parsing_Darksky - Fatal编程技术网

在Android Studio中从JSON获取值

在Android Studio中从JSON获取值,android,json,parsing,darksky,Android,Json,Parsing,Darksky,我知道有很多JSON解析问题。很抱歉,我又问了一个问题,但我不能让这个工作 我收到了来自DarkSky的JSON响应。这个响应很好,我正在将这些数据放入一个名为tvForecast的文本视图中。现在我试图从这个字符串中得到summary的值 以下是我的JSON响应: {"latitude":36.946813,"longitude":127.019736,"timezone":"Asia/Seoul","daily":{"data":[{"time":1570374000,"summary":"

我知道有很多JSON解析问题。很抱歉,我又问了一个问题,但我不能让这个工作

我收到了来自DarkSky的JSON响应。这个响应很好,我正在将这些数据放入一个名为tvForecast的文本视图中。现在我试图从这个字符串中得到summary的值

以下是我的JSON响应:

{"latitude":36.946813,"longitude":127.019736,"timezone":"Asia/Seoul","daily":{"data":[{"time":1570374000,"summary":"Light rain until evening.","icon":"rain","sunriseTime":1570397580,"sunsetTime":1570439340,"moonPhase":0.31,"precipIntensity":0.0327,"precipIntensityMax":0.0838,"precipIntensityMaxTime":1570406520,"precipProbability":1,"precipType":"rain","temperatureHigh":60.89,"temperatureHighTime":1570441560,"temperatureLow":53.41,"temperatureLowTime":1570477080,"apparentTemperatureHigh":60.97,"apparentTemperatureHighTime":1570441860,"apparentTemperatureLow":53.9,"apparentTemperatureLowTime":1570477080,"dewPoint":56.92,"humidity":0.94,"pressure":1019.4,"windSpeed":4.02,"windGust":15.19,"windGustTime":1570374000,"windBearing":96,"cloudCover":0.98,"uvIndex":4,"uvIndexTime":1570418340,"visibility":6.895,"ozone":289,"temperatureMin":55.57,"temperatureMinTime":1570396140,"temperatureMax":63.38,"temperatureMaxTime":1570374000,"apparentTemperatureMin":56.07,"apparentTemperatureMinTime":1570396020,"apparentTemperatureMax":62.88,"apparentTemperatureMaxTime":1570374000}]},"offset":9}
下面是我从一个TextView tvForecast收集此信息并将摘要值放入另一个TextView tvSummary的方法

private void jsonParse() {

        String jsonRawData = tvForecast.getText().toString();

        try {
            JSONObject jsonObject = new JSONObject(jsonRawData);

            JSONArray jsonArray = jsonObject.getJSONArray("data");
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject data = jsonArray.getJSONObject(i);

                String summary = data.getString("summary");

                tvSummary.append(summary);

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
这是来自Logcat的消息。注意,应用程序没有崩溃。它似乎没有找到我想要的价值


W/System.err:org.json.JSONException:No value for data

在获取json数组之前尝试添加此行

JSONObject jsonObject = new JSONObject(jsonRawData);
JSONObject jsonData = jsonObject.getJSONObject("daily")
JSONArray jsonArray = jsonData.getJSONArray("data");

在获取json数组之前,请尝试添加此行

JSONObject jsonObject = new JSONObject(jsonRawData);
JSONObject jsonData = jsonObject.getJSONObject("daily")
JSONArray jsonArray = jsonData.getJSONArray("data");

您没有添加每日对象。请试试这个

private void jsonParse() {

            String jsonRawData = tvForecast.getText().toString();

            try {

                JSONObject jsonObject = new JSONObject(jsonRawData);
                JSONObject jsonDailyObject = jsonObject.getJSONObject("daily")

                JSONArray jsonArray = jsonDailyObject.getJSONArray("data");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject data = jsonArray.getJSONObject(i);

                    String summary = data.getString("summary");

                    tvSummary.append(summary);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

您没有添加每日对象。请试试这个

private void jsonParse() {

            String jsonRawData = tvForecast.getText().toString();

            try {

                JSONObject jsonObject = new JSONObject(jsonRawData);
                JSONObject jsonDailyObject = jsonObject.getJSONObject("daily")

                JSONArray jsonArray = jsonDailyObject.getJSONArray("data");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject data = jsonArray.getJSONObject(i);

                    String summary = data.getString("summary");

                    tvSummary.append(summary);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
在JSON字符串中,数据不是根节点,而是在日常节点中。因此,首先必须解析daily节点,然后获取数据数组。 尝试执行以下操作

private void jsonParse() {

    String jsonRawData = tvForecast.getText().toString();

    try {
        // Reading the main JSON.
        JSONObject jsonObject = new JSONObject(jsonRawData);

        // Reading the content from daily node of JSON to get data array
        JSONObject jsonData = jsonObject.getJSONObject("daily")

        // Reading data node to get desired array
        JSONArray jsonArray = jsonData.getJSONArray("data");

        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject data = jsonArray.getJSONObject(i);

            String summary = data.getString("summary");

            tvSummary.append(summary);

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

}
在JSON字符串中,数据不是根节点,而是在日常节点中。因此,首先必须解析daily节点,然后获取数据数组。 尝试执行以下操作

private void jsonParse() {

    String jsonRawData = tvForecast.getText().toString();

    try {
        // Reading the main JSON.
        JSONObject jsonObject = new JSONObject(jsonRawData);

        // Reading the content from daily node of JSON to get data array
        JSONObject jsonData = jsonObject.getJSONObject("daily")

        // Reading data node to get desired array
        JSONArray jsonArray = jsonData.getJSONArray("data");

        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject data = jsonArray.getJSONObject(i);

            String summary = data.getString("summary");

            tvSummary.append(summary);

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

}

如果您正在努力使用JSON,那么将JSON解析为POJO可能是值得的。虽然您可以正确地使用JSON,但这样做可能更好,特别是如果您计划使用更多数据

首先,创建您的POJO类。根据需要重命名它们

public class SomeClass
{
    private String offset;

    private String timezone;

    private String latitude;

    private Daily daily;

    private String longitude;

    public String getOffset ()
    {
        return offset;
    }

    public void setOffset (String offset)
    {
        this.offset = offset;
    }

    public String getTimezone ()
    {
        return timezone;
    }

    public void setTimezone (String timezone)
    {
        this.timezone = timezone;
    }

    public String getLatitude ()
    {
        return latitude;
    }

    public void setLatitude (String latitude)
    {
        this.latitude = latitude;
    }

    public Daily getDaily ()
    {
        return daily;
    }

    public void setDaily (Daily daily)
    {
        this.daily = daily;
    }

    public String getLongitude ()
    {
        return longitude;
    }

    public void setLongitude (String longitude)
    {
        this.longitude = longitude;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [offset = "+offset+", timezone = "+timezone+", latitude = "+latitude+", daily = "+daily+", longitude = "+longitude+"]";
    }
}
**

**

您可以将数据[]转换为ArrayList,以便在需要时使用

现在您需要将JSON转换为POJO

为此,我们将使用GSON,将其添加到app.gradle文件中

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
现在要转换JSON,请编写如下代码:

Gson gson = new Gson();
SomeClass myClass = gson.fromJson(jsonString, SomeClass.class);
现在你需要做的就是

setText(myClass.getDaily().getDaily()[0].getSummary();
你所需要做的就是解决这个问题

getDaily()[0]

检查数据是否确实存在,或者它可能引发异常

如果您正在努力使用JSON,那么将JSON解析为POJO可能是值得的。虽然您可以正确地使用JSON,但这样做可能更好,特别是如果您计划使用更多数据

首先,创建您的POJO类。根据需要重命名它们

public class SomeClass
{
    private String offset;

    private String timezone;

    private String latitude;

    private Daily daily;

    private String longitude;

    public String getOffset ()
    {
        return offset;
    }

    public void setOffset (String offset)
    {
        this.offset = offset;
    }

    public String getTimezone ()
    {
        return timezone;
    }

    public void setTimezone (String timezone)
    {
        this.timezone = timezone;
    }

    public String getLatitude ()
    {
        return latitude;
    }

    public void setLatitude (String latitude)
    {
        this.latitude = latitude;
    }

    public Daily getDaily ()
    {
        return daily;
    }

    public void setDaily (Daily daily)
    {
        this.daily = daily;
    }

    public String getLongitude ()
    {
        return longitude;
    }

    public void setLongitude (String longitude)
    {
        this.longitude = longitude;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [offset = "+offset+", timezone = "+timezone+", latitude = "+latitude+", daily = "+daily+", longitude = "+longitude+"]";
    }
}
**

**

您可以将数据[]转换为ArrayList,以便在需要时使用

现在您需要将JSON转换为POJO

为此,我们将使用GSON,将其添加到app.gradle文件中

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
现在要转换JSON,请编写如下代码:

Gson gson = new Gson();
SomeClass myClass = gson.fromJson(jsonString, SomeClass.class);
现在你需要做的就是

setText(myClass.getDaily().getDaily()[0].getSummary();
你所需要做的就是解决这个问题

getDaily()[0]

检查数据是否确实存在,或者它可能引发异常

数据在每日对象中,你需要先获取它。检查我的答案数据在每日对象中,你需要先获取它。检查我的答案你没有用它回答问题你没有用它回答问题