私の活動では、スレッドを使用してサーバを呼び出し、内部ストレージに置くXML応答を受信します。Androidで非同期タスクを管理する方法
この呼び出しの後、このxmlファイルを読み込んで解析し、このxmlファイルに関する情報をユーザーに表示しますが、このファイルをInputStreamに追加すると、このInputStreamはnullになります。
私の活動は単純な実行を続け、私のInputStreamを作成するときに私のxmlファイルが存在しないので、スレッドを待ちません。
私は私のプログラムの実行に対応し、このスキーマを作った:私の活動は私のスレッドの終了を待つことができますどのように
?私はこれが主要な活動を凍結するのは良いことではないことを知っていますが、私はどのようにできるのか分かりません。 スレッド上のオブザーバーをスレッドの最後まで追加することはできますか?
PS:私のスレッドは************* *************/
最初のソリューションで編集/ Runnableを
を実装あなたの応答のためにすべてのおかげで、私は多くの進歩をさせる。
//In my Activity
MyAsyncTask asyncTask = new MyAsynctask();
asynctask.execute();
//My Async class
public class MyAsynctask extends AsyncTask<Void,Void,Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(getApplicationContext(), "calling server...", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... params) {
//Instance of calling class
//Method of this instance to call the server and create a file in internal storage
//After that my file is stored with the server response
return null;
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), "Data received", Toast.LENGTH_LONG).show();
FileInputStream inputStream = null;
inputStream = openFileInput("myFile");
data=XMl.parse(inputStream);
}
}
私はこの投稿をお待ちしており、あなたの回答は役に立ちます。
[AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html) – Titus
私が非同期タスクを使用する場合は、スレッドを作成する必要はありません。私のasyncTaskにすべてのリクエストメソッドを入れますか? – Swodniw
'AsyncTask'はバックグラウンドスレッドを作成し、タスクが完了したときにメインスレッド上で実行されるコールバック' onPostExecute(...) 'を持っています。 – Titus