(Android) Read text from web file

0

I'm doing an application in which I need to read a string of a file hosted in a hosting and display it in a Toast, with the attached code works without problems from Eclipse but in Android Studio I can not get it to get me that string . Any ideas, solutions?

public String lee ()throws Exception{

     URL url = new URL("http://radios-android.000webhostapp.com/fichero_web.txt");
     URLConnection urlConnection = url.openConnection();
     InputStream is = urlConnection.getInputStream();
     BufferedReader br = new BufferedReader(new InputStreamReader(is));

     String linea = br.readLine();

    br.close();return linea;
}
public void muestra_toast (View v) throws Exception{
        String cadena = new String();

       try{
           cadena=lee();
       }catch (Exception e){}

        Toast.makeText(this, cadena, Toast.LENGTH_LONG).show();
}

This error launches when you tap on the cardview that calls the function and the app falls:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: mazcvei.login_screen, PID: 5409
                  java.lang.IllegalStateException: Could not execute method for android:onClick
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                      at android.view.View.performClick(View.java:5716)
                      at android.widget.TextView.performClick(TextView.java:10926)
                      at android.view.View$PerformClick.run(View.java:22596)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:7325)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Method.invoke(Native Method)
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                      at android.view.View.performClick(View.java:5716) 
                      at android.widget.TextView.performClick(TextView.java:10926) 
                      at android.view.View$PerformClick.run(View.java:22596) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:7325) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                   Caused by: android.os.NetworkOnMainThreadException
                      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
                      at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
                      at java.net.InetAddress.getAllByName(InetAddress.java:215)
                      at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
                      at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:220)
                      at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:176)
                      at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:108)
                      at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:501)
                      at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:484)
                      at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466)
                      at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:372)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:476)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:418)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:235)
                      at mazcvei.login_screen.MainActivity.lee(MainActivity.java:26)
                      at mazcvei.login_screen.MainActivity.muestra_toast(MainActivity.java:37)
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                      at android.view.View.performClick(View.java:5716) 
                      at android.widget.TextView.performClick(TextView.java:10926) 
                      at android.view.View$PerformClick.run(View.java:22596) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:7325) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
    
asked by Mario AzcVei 15.02.2018 в 11:16
source

1 answer

0

Seeing the exception you posted, I already answer with the answer: The key exception is NetworkOnMainThreadException which is thrown because you are trying to perform a network operation on the main thread of android. All network operations must be called on a secondary thread.

For this I recommend you use AsyncTask that already implements all the logic and will facilitate work.

As your code is simple and maybe you just want to implement something easier, you can use a Thread such that:

Thread thread = new Thread() {
    @Override
    public void run() {
        try {
             //llamada a la operación de red aquí
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};

thread.start();
    
answered by 15.02.2018 в 14:27