Android + dostęp do internetu + błąd.

0

Witam.

Bawię się z Androidem i próbuję zrobić aplikację pobierająca treść strony www.

Tak wygląda kod:

package com.example.user.myapplication;

import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

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

        try {
            String fullString = "";
            URL url = new URL("http://www.wp.pl");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                fullString += line;
            }
            reader.close();
        } catch (IOException ex) {
            String error = ex.getMessage();
        }
    }

    final private int REQUEST_CODE_ASK_PERMISSIONS = 123;
    private void CheckPermission() {
        try {
            int hasInternetConnectionPermission = checkSelfPermission(Manifest.permission.INTERNET);
            if (hasInternetConnectionPermission != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.INTERNET},
                        REQUEST_CODE_ASK_PERMISSIONS);
                return;
            }
        } catch (Exception ex) {
            String error = ex.getMessage();
        }
    }
}

A tak manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.user.myapplication">

    <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>

</manifest>

Po uruchomieniu aplikacji, pojawia się komunikat "Aplikacja My Application została zatrzymana", program nie wchodzi w żaden z bloków catch.

Dlaczego tak się dzieje?

0

jaki masz exception w debugerze?

0

W tym sęk że nic nie ma.
screenshot-20171015182030.png

0

dobra teraz widze. nic nie ma bo nic nie logujesz:

        } catch (Exception ex) {
            String error = ex.getMessage();
        }

wpisujesz wartosc do Stringa i nic z tym nie robisz

zrob tak:

        } catch (Exception ex) {
             Log.e("MYAPP", "exception: " + ex); 
        }

i teraz zobacz co android loguje

Log.e() z 3 arg wykonuje automatycznie getStackTrace na ostatniom argumencie exception
https://developer.android.com/reference/android/util/Log.html

0
10-15 19:32:52.191 17730-17730/? E/Zygote: v2
10-15 19:32:52.191 17730-17730/? I/libpersona: KNOX_SDCARD checking this for 10350
10-15 19:32:52.191 17730-17730/? I/libpersona: KNOX_SDCARD not a persona
10-15 19:32:52.192 17730-17730/? E/Zygote: accessInfo : 0
10-15 19:32:52.193 17730-17730/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy Index[2],Con:u:r:zygote:s0 RAM:SEPF_SECMOBILE_7.0_0007, [-1 -1 -1 -1 0 1]
10-15 19:32:52.194 17730-17730/? I/SELinux: SELinux: seapp_context_lookup: seinfo=untrusted, level=s0:c512,c768, pkgname=com.example.user.myapplication 
10-15 19:32:52.198 17730-17730/? I/art: Late-enabling -Xcheck:jni
10-15 19:32:52.230 17730-17730/? D/TimaKeyStoreProvider: TimaKeyStore is not enabled: cannot add TimaSignature Service and generateKeyPair Service
10-15 19:32:52.441 17730-17730/com.example.user.myapplication W/System: ClassLoader referenced unknown path: /data/app/com.example.user.myapplication-2/lib/arm
10-15 19:32:52.472 17730-17730/com.example.user.myapplication I/InstantRun: starting instant run server: is main process
10-15 19:32:52.748 17730-17730/com.example.user.myapplication W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
10-15 19:32:52.956 17730-17730/com.example.user.myapplication D/NetworkSecurityConfig: No Network Security Config specified, using platform default
10-15 19:32:52.960 17730-17730/com.example.user.myapplication I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-15 19:32:52.960 17730-17730/com.example.user.myapplication I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-15 19:32:52.969 17730-17730/com.example.user.myapplication D/AndroidRuntime: Shutting down VM
10-15 19:32:52.976 17730-17730/com.example.user.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.myapplication, PID: 17730
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.myapplication/com.example.user.myapplication.MainActivity}: android.os.NetworkOnMainThreadException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
 Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
at java.net.InetAddress.getAllByName(InetAddress.java:752)
at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:209)
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:163)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:105)
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:489)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:465)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247)
at java.net.URL.openStream(URL.java:1057)
at com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:25)
at android.app.Activity.performCreate(Activity.java:6955)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) 
at android.app.ActivityThread.-wrap14(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6776) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386) 

Chyba zauważyłem słowo klucz : NetworkOnMainThreadException :)

0

Do Permissinow sprawdz sobie fajna bliblioteke:
https://github.com/permissions-dispatcher/PermissionsDispatcher

1 użytkowników online, w tym zalogowanych: 0, gości: 1