Крашится приложение в Android Studio (Java) при попытке отправить запрос с помощью HttpUrlConnection

Пытаюсь сделать приложение, которое с помощью OpenWeatherMap API показывает погоду в твоем текущем местоположении. Местоположение определяется с помощью GPS и Network. Определение местоположения работает корректно, все, что мне осталось - отправить GET запрос и запарсить JSON, но уже долгое время сталкиваюсь с трудностью, решение которой найти нигде не смог. Суть такая: устанавливаю соединение с помощью openConnection(), и при любой попытке взаимодействия с соединением (будь то даже получение кода ответа) само приложение вылетает. Пробовал просто отправить GET в пустом проекте - аналогично. А отладка отбрасывает в файл ActivityThread.

case DUMP_PROVIDER:
                handleDumpProvider((DumpComponentInfo)msg.obj);
                break;

Файл Манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.location">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Ну и файл MainActivity:

@Override
public void onCreate(Bundle savedInstanceState) { // Application start
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); //Check if GPS is available
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); // Check if Network is 
    available
    View = (TextView) findViewById(R.id.View);
    View2 = (TextView) findViewById(R.id.View2);
    Response = this.getData(20000, "UTF-8", "http://api.openweathermap.org/data/2.5/weather? 
    q=London&appid=ТУТ_МОЙ_ТОКЕН" ); //Вызывается метод для запроса
    View2.setText(Response); //Должно вывести результат в TextView. 
    if (!gps_enabled && !network_enabled) {
        View.setText("Nothing is enabled");
    }
    if (gps_enabled)
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 120000, 2, locationListenerGps); 
    //Start GPS; check each 2 metres or 2 minutes
    if (network_enabled)
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 120000, 2, 
    locationListenerNetwork); //Start Network; check each 2 metres or 2 minutes
    timer = new Timer();
    timer.schedule(new GetLastLocation(), 20000); // If GPS and Network doesn't start too long - 
    activate
}

public String getData(int _timeout, String _encoding, String _url) { //Тот самый метод
    try {
        URL url = new URL(_url);
        HttpURLConnection connect = (HttpURLConnection) url.openConnection();
        connect.setRequestMethod("GET");
        connect.setRequestProperty("Content-Type", "application/json");
        connect.setRequestProperty("Content-length", "0");
        connect.setUseCaches(false);
        connect.setAllowUserInteraction(false);
        connect.setConnectTimeout(_timeout);
        connect.setReadTimeout(_timeout);
        connect.setInstanceFollowRedirects(false);
        connect.getRequestMethod();
        //connect.connect(); //На этом моменте краш
        int status = connect.getResponseCode(); //И тут краш
        switch (status) {
            case 200:
            case 201:
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        connect.getInputStream(), _encoding));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                }
                br.close();
                return sb.toString();
        }
    } catch (MalformedURLException ex) {
         //код обработки ошибки
    } catch (IOException ex) {
          //код обработки ошибки
    }
    return null;

}

Думаю методы, связанные с местоположением вам не нужны, но если понадобятся - скину.


Ответы (0 шт):