阅读在线存储的文本文件

时间:2018-02-07 14:11:18

标签: java android android-webview

我正在尝试阅读在我的Android Studio应用程序中在线存储的文本文件。 我尝试了一些代码,一旦应用程序打开,它似乎会崩溃我的应用程序。这是我尝试过的代码:

    protected void onCreate(Bundle savedInstanceState) {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_browser);
    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setUseWideViewPort(true);

    mWebView.setWebViewClient(new WebViewClient());
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    mWebView.getSettings().setAppCacheEnabled(false);
    mWebView.getSettings().setDomStorageEnabled(true);
    mWebView.getSettings().setEnableSmoothTransition(true);
    CookieManager.getInstance().setAcceptCookie(true);
    mWebView.clearCache(true);

    try {
        URL url = new URL("http://urlhere.co.uk/files/testFile.txt");

        HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
        InputStream is = con.getInputStream();

        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String line;
        String link = null;

        while((line = br.readLine()) != null) {
            link = line;
        }
        mWebView.loadUrl("file:///" + Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + link);
        br.close();
    } catch (MalformedURLException e) {
        System.out.println();
    } catch (IOException e) {
        System.out.print("test test");
    }

}

就像一点解释一样。文本文件包含将加载到webview中的URL。这是我想要做的事情的最佳方式。

更新 我使用了logcat并得到了一些我认为是由此引起的错误:

java.lang.ClassCastException: com.android.okhttp.internal.huc.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection

有没有人对我的应用为什么会立即崩溃有任何建议?

提前致谢

2 个答案:

答案 0 :(得分:0)

感谢您的回复。我无法相信这是一个如此简单的修复。通过更改为http而不是https对象,它消除了更新1中显示的第一个错误。

然而,这导致了android.os.NetworkOnMainThreadException错误,我认为是因为我没有使用Async。我将在未来发布此问题的任何人发布此问题。

再次感谢所有回复

答案 1 :(得分:0)

您需要在后台线程中访问网络。 AsyncTask对于执行此操作以及之后在UI线程上访问结果都很有用。像这样:

try {
    final URL url = new URL("http://urlhere.co.uk/files/testFile.txt");
    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... voids) {
            try {
                URLConnection con = url.openConnection();
                InputStream is = con.getInputStream();

                BufferedReader br;
                try {
                    br = new BufferedReader(new InputStreamReader(is));
                    String line;
                    if ((line = br.readLine()) != null) {
                        return line;
                    }
                } finally {
                    br.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        protected void onPostExecute(String link) {
            mWebView.loadUrl("file:///" + Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + link);            
        }
    }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} catch (MalformedURLException e) {
    e.printStackTrace();
}

(另外,将URLConnection(或HttpURLConnection)与http一起使用。HttpsURLConnection的演员与https一起使用 - 但看起来你发现了已经。)