2017-05-03 1 views
0

Ich frage hier, da alle anderen Lösungen nicht funktioniert haben. Ich möchte eine Textdatei aus dem Internet lesen und diese Zeichenfolge in eine Textansicht einfügen lassen. Ich teste gerade im Moment und das einzige in der Textdatei ist der Wert "223". Meine App stürzt beim Start ab. Kann mir bitte jemand helfen?Lesen Sie die Textdatei von URL und Ausgabe an TextView

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.StringBuilderPrinter; 
import android.widget.TextView; 
import android.widget.Toast; 

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

public class MainActivity extends AppCompatActivity { 

    private TextView textView; 
    private StringBuilder text = new StringBuilder(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     BufferedReader reader = null; 

     try { 

      URL url = new URL("http://something.uk/pmt/status.txt"); 


      reader = new BufferedReader(
        new InputStreamReader(url.openStream())); 


      String str; 


      while ((str = reader.readLine()) != null) { 
       text.append(str); 
       text.append('\n'); 
      } 

     } catch (IOException e) { 
      Toast.makeText(getApplicationContext(), "Error reading file.", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (MalformedURLException e) { 

       } 

       catch (IOException e) { 

       } 
      } 

      TextView output = (TextView) findViewById(R.id.textView); 
      output.setText((CharSequence) text); 
     } 
    } 
} 

STACKTRACE:

https://pastebin.com/YSCB9RBg

+1

Bitte senden Sie Ihre Fehler von Logcat –

+0

Wie verwende ich Logcat? Ich habe versucht adb logcat im Terminal, aber es hat nicht funktioniert. – JB2000

+0

Der Fehler ist ziemlich klar ... NetworkOnMainThread .... das heißt, Sie müssen den Code von try catch in einem anderen Thread ausführen. –

Antwort

1

Wahrscheinlich, weil Sie StringBuilder verwenden, die kein CharSequence ist. Verwenden Sie output.setText(text.toString()); anstelle output.setText((CharSequence) text);

TextView.setText() erwartet ein CharSequence als ein Argument. String ist ein CharSequence, aber StringBuilder ist nicht. Um eine String zu erhalten, gab man an StringBuilder.toString()

Sie sollten den Absturz jedoch betrachten. Und posten Sie es das nächste Mal, wenn Sie eine Frage zu stackoverflow stellen.

Das von Ihnen angegebene Crash-Protokoll gibt den Grund für den Absturz an: android.os.NetworkOnMainThreadException. Es bedeutet, dass Sie versuchen, eine Netzwerkoperation auf dem Hauptthread durchzuführen, und das Android-Betriebssystem lässt Sie nicht. Es ist eine Regel seit Honeycomb. Die Lösung besteht darin, beispielsweise AsyncTask zu verwenden. Hier ist an article about network ops and AsyncTask.

+0

was du mit stringbuilder meinst, ist keine chasefolge? – Remario

+0

@Remario erweiterte die Antwort. –

+0

Vielen Dank für Ihre Antwort, ich habe getan, was Sie vorgeschlagen haben, aber die App stürzt immer noch ab. – JB2000

1
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.StringBuilderPrinter; 
import android.widget.TextView; 
import android.widget.Toast; 

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

public class MainActivity extends AppCompatActivity { 

    private TextView textView; 
    private StringBuilder text = new StringBuilder(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     BufferedReader reader = null; 

     new AsyncTask<Void,Void,Void>(){ 


      @Override 
      protected Void doInBackground(Void... params) { 
try { 

      URL url = new URL("http://something.uk/pmt/status.txt"); 


      reader = new BufferedReader(
        new InputStreamReader(url.openStream())); 


      String str; 


      while ((str = reader.readLine()) != null) { 
       text.append(str); 
       text.append('\n'); 
      } 

     } catch (IOException e) { 
      Toast.makeText(getApplicationContext(), "Error reading file.", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (MalformedURLException e) { 

       } 

       catch (IOException e) { 

       } 
      } 
       return null; 
      } 

    @Override 
      protected void onPostExecute(Void aVoid) { 
       super.onPostExecute(aVoid); 
      TextView output = (TextView) findViewById(R.id.textView); 
      output.setText(text.toString()); 
      } 
     }.execute(null,null,null); 


     } 
    } 
} 
Verwandte Themen