-2
嘗試從URL獲取文件到InputStream元素中(使用AsyncTask),然後使用它,但到目前爲止不成功。 AsyncTask的參數是否正確?我是否可以檢查InputStream,就像我在代碼中做的一樣,或者它是錯誤的,它會一直返回null?我應該做什麼其他更改?來自AsyncTask中的URL的InputStream
我的代碼:
String url = "https://www.example.com/file.txt";
InputStream stream = null;
public void load() {
DownloadTask downloadTask = new DownloadTask();
downloadTask.execute(url);
if (stream == null) {
//fail, stream == null
} else {
//success
}
}
class DownloadTask extends AsyncTask <String, Integer, InputStream> {
@Override
protected void onPreExecute() {
}
@Override
protected InputStream doInBackground(String... params){
try {
URL url = new URL(url);
stream = url.openStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return stream;
}
@Override
protected void onPostExecute(InputStream result) {
super.onPostExecute(result);
}
}
EDIT2: 我固定它。
public void load(){
//some code
DownloadTask dt=new DownloadTask();
dt.execute("www.example.com");
}
private class DownloadTask extends AsyncTask<String,Integer,Void>{
InputStream text;
protected Void doInBackground(String...params){
URL url;
try {
url = new URL(params[0]);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
InputStream is=con.getInputStream();
text = is;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result){
//use "text"
}
}
我解決我的問題(編輯我的問題)。感謝提示,我需要更新onPostExecute()方法中的UI!僞代碼對於像我這樣的初學者來說有點混亂,因爲對於我的任務(在asynctask中獲取inputstream),我不需要preExecute,progressUpdate,getFromStream() - 所有這些與任務無關。 – user3671635