-2
(AsyncTaskを使用して)URLからInputStream要素にファイルを取得しようとして失敗しました。 AsyncTaskのパラメータは正しいですか?私は自分のコードで行ったようにInputStreamをチェックすることができますか、それとも間違っていますか?それは常にnullを返しますか?私がすべきその他の変更は?URLからAsyncTaskの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