繁体   English   中英

从HTML解析android中的文本文件

[英]Parsing a text file in android from an HTML

因此,我已经为此工作了一段时间,然后撞上了砖墙。 开始处理时,它总是给我致命错误。
因此,基本上我想从互联网上读取一个文本文件,然后对其进行解析,这样我就可以开始分解并使用JSON解析器处理JSON数据。 但这远一点(我已经建立了一部分)。 我只是在连接和下载数据时遇到麻烦。 我只想读入文本文件,然后再次打印出来。 感谢您对此的任何帮助。

这就是给我的

01-26 15:11:48.373 1958-1958 / com.example.mmillar.urljsonparser I / art:不晚启用-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 / Status ::关闭连接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:致命异常:主进程:com.example.mmillar.urljsonparser,PID:1958 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.mmillar.urljsonparser / com.examp le.mmillar.urljsonparser.MainActivity}:位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)的android.os.NetworkOnMainThreadException android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303)的.access $ 800(ActivityThread.java:151)android.os.Looper.loop的android.os.Handler.dispatchMessage(Handler.java:102) (Looper.java:135)在android.app.ActivityThread.main(ActivityThread.java:5254)在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),原因:android.os。 android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)上的NetworkOnMainThreadException(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)位于com.android.okhttp.internal com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)的com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine的.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232) com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)(com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)处的.java:272)。 com.example.mmillar.urljsonparser.JSONParser上的com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:199)上的android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332)。 android.app.Activity.perfo上com.example.mmillar.urljsonparser.MainActivity.onCreate(MainActivity.java:24)上的getStream(JSONParser.java:40) android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)处的rmCreate(Activity.java:5990)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)处: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)的java.lang.reflect.Method.invoke(本机方法)的android.app.ActivityThread.main(ActivityThread.java:5254)的java.lang的)。 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)上的com.android.internal.os.ZygoteInit.main(ZygoteInit.java)上的Reflection.Method.invoke(Method.java:372): 698)01-26 15:11:53.474 1958-1958 /? I / Process:正在发送信号。 PID:1958 SIG:9

所以我迷失在哪里错了。 我想我已经做好一切准备,一切顺利。 像inputstream,bufferreader一样。 这就是我所拥有的。

这是解析器程序

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


}

而不是使用

jp.getStream(testHtml); 

采用

jp.execute("stream url here");

当前,您正在尝试在Asynctask创建一个函数,但没有利用AsyncTask的使用。 它仍然尝试在mainThread上建立HttpConnection,并引发异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM