我正在尝试阅读在我的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
有没有人对我的应用为什么会立即崩溃有任何建议?
提前致谢
答案 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
一起使用 - 但看起来你发现了已经。)