2016-01-26 5 views
0

Итак, я немного поработал над этим и ударил кирпичную стену. Он продолжает давать мне фатальную ошибку, когда она начинает обрабатываться.
Так что в основном я хочу читать в текстовом файле через Интернет, а затем разбирать его, чтобы я мог разбить его и использовать JSON-анализатор для работы с данными JSON. Но это дальше по линии (и у меня есть часть). У меня просто возникают проблемы с подключением и загрузкой данных. Я просто хочу прочитать в текстовом файле, а затем распечатать его снова. Благодарим вас за помощь.Анализ текстового файла в android из HTML

Это то, что он дает мне

01-26 15: 11: 48.373 1958-1958/com.example.mmillar.urljsonparser I/искусство: Не поздно включение -Xcheck: JNI (уже) 01-26 15: 11: 48.556 1958-1958/com.example.mmillar.urljsonparser D/HTML P1 :: http://textfiles.com/100/914bbs.txt 01-26 15: 11: 48.556 1958-1958/com.example.mmillar.urljsonparser D/HTML P2 :: http://textfiles.com/100/914bbs.txt 01-26 15: 11: 48.557 1958-1958/com.example.mmillar.urljsonparser D/HTML inJSON :: http://textfiles.com/100/914bbs.txt 01-26 15: 11: 48.569 1958-1958/com.example.mmillar .urljsonparser D/Статус :: Открытое соединение 01-26 15: 11: 48.569 1958-1958/com.example.mmillar.urljsonparser D/Статус :: Закрывающее соединение 01-26 15: 11: 48.569 1958-1958/com.example.mmillar.urljsonparser D/AndroidRuntime : Выключение VM 01-26 15: 11: 48.570 1958-1958/com.example.mmillar.urljsonparser E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.mmillar.urljsonparser, PID: 1958 java.lang .RuntimeException: невозможно запустить Activity ComponentInfo {com.example.mmillar.urljsonparser/com.example.mmillar.urljsonparser.MainActivity}: android.os.NetworkOnMainThreadException at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2387) на android.app.ActivityThread.access $ 800 (ActivityThread.java:151) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1303) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5254) на java.lang.reflect.Method.invoke (собственный метод) at java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) at com.android.internal.os.ZygoteInit. главный(ZygoteInit.java:698) Вызванный: android.os.NetworkOnMainThreadException в android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1147) в java.net.InetAddress.lookupHostByName (InetAddress.java:418) на java.net.InetAddress.getAllByNameImpl (InetAddress.java:252) на java.net.InetAddress.getAllByName (InetAddress.java:215) на com.android.okhttp.HostResolver $ 1.getAllByName (HostResolver.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:232) at com.android.okhttp.internal.http.RouteSelector.next (Ro uteSelector.java:124) at com.android.okhttp.internal.http.HttpEngine.connect (HttpEngine.java:272) at com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:211) at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:382) at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse (HttpURLConnectionImpl.java: 332) в com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java:199) в com.example.mmillar.urljsonparser.JSONParser.getStream (JSONParser.java:40) в com.example. mmillar.urljsonparser.MainActivity.onCreate (MainActivity.java:24) at android.app.Activity.performCreate (Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate (Instrumentation .java: 1106) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2278) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2387) в android.app.ActivityThread.access $ 800 (ActivityThread. java: 151) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1303) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper. java: 135) at android.app.ActivityThread.main (ActivityThread.java:5254) at java.lang.reflect.Method.invoke (собственный метод) на java.lang.reflect.Method.invoke (Method.java:372) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) на com.android.internal.os.ZygoteInit .main (ZygoteInit.java:698) 01-26 15: 11: 53.474 1958-1958 /? I/Процесс: сигнал отправки. PID: 1958 SIG: 9

Так что я немного потерял место, где это происходит не так. Я думаю, что у меня все налажено и идет хорошо. Как входной поток, bufferreader и все. Итак, вот что у меня есть.

Это программа Parser

public class JSONParser extends AsyncTask<String, Void, String>{ 

@Override 
protected String doInBackground(String... inputUrl) { 
    getStream(inputUrl[0]); 
    return null; 
} 

public void getStream(String urlString) 
{ 
    Log.d("HTML inJSON: ", urlString); 
    //variables for the connection and downloading the JSON data 
    URL url = null; 
    HttpURLConnection urlConnection = null; 
    InputStream inputStream = null; 

    try { 
     url = new URL(urlString); 
     urlConnection = (HttpURLConnection)url.openConnection(); 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.connect(); 
     Log.d("Status:","Connection Opened"); 
     //read in the data 
     BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
     //build the data for parsing 
     StringBuilder myString = new StringBuilder(); 
     String line; 
     while((line = br.readLine()) !=null) 
     { 
      myString.append(line); 
     } 
     Log.d("Status:"," JSON loaded into string"); 
     Log.d("Total:", myString.toString()); 


    } catch (IOException e) { 
     e.printStackTrace(); 
    }finally { 
     if (urlConnection != null) 
     { 
      //close the connection 
      urlConnection.disconnect(); 
      Log.d("Status:", " Closing connection"); 
     } 
    } 
} 

}

И вот главная программа, которую я просто запустить вещь, потому что я просто хочу, чтобы вывести из файла на консоль я просто хочу, чтобы убедиться, оно работает.

public class MainActivity extends AppCompatActivity { 
//http://textfiles.com/100/914bbs.txt 
private String testHtml = "http://textfiles.com/100/914bbs.txt"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.d("HTML P1: ", testHtml); 
    JSONParser jp = new JSONParser(); 
    Log.d("HTML P2: ", testHtml); 
    jp.getStream(testHtml); 
    Log.d("HTML P3: ", testHtml); 


} 

ответ

4

вместо использования

jp.getStream(testHtml); 

Используйте

jp.execute("stream url here"); 

В настоящее время вы пытаетесь создать функцию в Asynctask, но не используя использование AsyncTask. Он по-прежнему пытается создать HttpConnection на mainThread и выдает исключение.

+0

Спасибо, что сработал. Хорошо, поэтому я понимаю, почему, я думаю, что основной поток не может установить соединение, потому что у него нет всех ссылок на URL-адреса и прочее. Или это потому, что есть тот, который уже открыт, а затем он просто закрывает этот и дает ошибку? Еще раз спасибо – MNM

+1

Рад, что я могу помочь. :) Проблема возникает из-за того, что по умолчанию Android ThreadPolicy блокирует любое использование сети в потоке пользовательского интерфейса.Его можно обойти, используя следующее: StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder(). AllowAll(). Build(); StrictMode.setThreadPolicy (политика); , но обычно это не рекомендуется для вызова какой-либо сетевой операции в потоке пользовательского интерфейса. –

Смежные вопросы