我无法转换API密钥的JSObject

时间:2017-05-08 19:33:12

标签: json api

我正在使用https://openweathermap.org/current的APi 我想从API中获取特定的天气部分,因为我使用的是JSON


以下链接是我想要天气部分的API密钥
http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1

org.json.JSONObject $ 1类型的值null无法转换为JSONObject


我正在使用AsyncTask

我的主要活动在这里

公共类MainActivity扩展了AppCompatActivity {

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

    DownloadWeatherData downloadWeatherData = new DownloadWeatherData();

    try {

      downloadWeatherData.execute("http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1").get();


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

}

这是我的java文件

公共类DownloadWeatherData扩展了AsyncTask {

String weatherdata;
@Override
protected String doInBackground(String... urls)
{
    try {
        URL url = new URL(urls[0]);

        HttpURLConnection connection =(HttpURLConnection) url.openConnection();
        connection.connect();

        InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream());

        int data = inputStreamReader.read();

        while(data!=-1)
        {
            char str = (char)data;
            weatherdata+=str;

            data = inputStreamReader.read();
        }

        return weatherdata;

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

    } catch (IOException e) {

        e.printStackTrace();
    }
    return null;
}

@Override
protected void onPostExecute(String s)
{
    super.onPostExecute(s);


    try {
        JSONObject jsonObject = new JSONObject(s);
        String info = jsonObject.getString("weather");
        Log.d("weatherpart",info);

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

    }
}

}

1 个答案:

答案 0 :(得分:0)

你做错了。 天气是一个数组,而不是 json 对象。这样做:

JSONObject jsonObj = new JSONObject(s);

JSONArray ja_data = jsonObj.getJSONArray("weather");
int length = ja_data.length();
for(int i=0; i<length; i++) {
    JSONObject jsonObj = ja_data.getJSONObject(i);
    .
    .
    .
}