Погода API и HttpURLConnection

Поэтому я собирался сделать приложение, которое предоставляет вам погоду для вашего текущего местоположения. Теперь я знаю свою текущую координату, и я написал следующий код:

MainActivity.Ява

//..... (previous codes obtain the coordinate, and working)
RetrieveWeather mRetrieveWeather = new RetrieveWeather();
t.append("" + mRetrieveWeather.getWeatherReport(mCoordinate));

RetrieveWeather.Ява

package com.example.maest.weather;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by maest on 2016/9/28.
 */
public class RetrieveWeather {
        public String getWeatherReport(double[] mCoordinate){
        HttpURLConnection mHttpUrlConnection = null;
        InputStream mInputStream = null;

        try{
            mHttpUrlConnection = (HttpURLConnection) (new URL("http://api.openweathermap.org/data/2.5/forecast?lat=38.868884&lon=-77.053086&appid=myid)).openConnection();
            mHttpUrlConnection.setRequestMethod("GET");
            mHttpUrlConnection.setDoInput(true);
            mHttpUrlConnection.connect();

            StringBuffer mStringBuffer = new StringBuffer();
            mInputStream = mHttpUrlConnection.getInputStream();
            BufferedReader mBufferedReader = new BufferedReader(new InputStreamReader(mInputStream));
            String mString = null;
            while ((mString = mBufferedReader.readLine()) != null)
                mStringBuffer.append(mString + "n");

            mInputStream.close();
            mHttpUrlConnection.disconnect();
            return mStringBuffer.toString();
        }catch (Throwable t){
            t.printStackTrace();
        }finally{
            try { mInputStream.close();}catch(Throwable t) {}
            try { mHttpUrlConnection.disconnect();}catch(Throwable t) {}
        }

        return "You failed again!";
    }
}

Обратите внимание, что url-адрес действителен, хотя Я заменил свой appid здесь.

Каждый раз, когда я запускаю этот код, TextView отображает «вы снова не удалось!».

Почему???

(p.s. У меня есть соответствующие разрешения пользователя внутри Манифеста)

1 ответ

  1. В главном потоке нельзя выполнять сетевые запросы. Это, вероятно, проблема, хотя трудно сказать, не видя результаты печати трассировки стека. Я бы рекомендовал использовать библиотеку, чтобы сделать ваши сетевые запросы, это избавит вас от многих головных болей. Посмотрите на Retrofit например http://square.github.io/retrofit/