我正在创建一个应用,我需要一个功能来从网站获取纯文本。我能够在我的电脑上得到文本并将其打印出来,但是当我尝试在Android设备上运行时,应用程序就不会启动。
我认为它与抛出IOException有关。我一直在读,因为我没有定义界面,所以我不应该这样做。有办法解决这个问题吗?如果我不抛弃异常,Android Studio就不会编译我的代码。
功能:
public String getText(String site) throws IOException {
// Make a URL to the web page
URL url = new URL(site);
// Get the input stream through URL Connection
URLConnection con = url.openConnection();
InputStream is =con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// read each line and return the final text
String res = "";
String line = null;
while ((line = br.readLine()) != null) {
//System.out.println(line);
res += line;
}
return res;
}
这就是Android Studio让我在onCreate方法中运行它的方式:
String text = null;
try {
text = getText("http://myWebsite.com");
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
答案 0 :(得分:0)
首先,阅读您的logcat - 您应该在那里看到完全堆栈跟踪的异常。其次,捕获IOException没有任何问题,但是一旦缓存,你必须对它做一些事情 - 比如告诉用户功能问题 - 比如没有更多空间等等。
这就是Android Studio让我在onCreate方法中运行它的方式:
这是一个问题,因为你是在UI线程上从你的站点获取数据,你必须从工作线程,即。的AsyncTask。
答案 1 :(得分:0)
您无法在主线程
中执行此操作试试这个
class MyTask extends AsyncTask<Void, Void, String>{
private String site;
MyTask(String site) {
this.site = site;
}
@Override
protected String doInBackground(Void... params) {
try {
URL url = new URL(site);
URLConnection con = url.openConnection();
InputStream is =con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// read each line and return the final text
String res = "";
String line = null;
while ((line = br.readLine()) != null) {
//System.out.println(line);
res += line;
}
return res;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s != null){
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
}
}
}
获取字符串的位置用作
new MyTask("http://myWebsite.com").execute()