私のアプリにはメイン アクティビティにスピナーがあり、コンテンツは sqlite から読み込まれます。また、私のアプリは、ユーザーがサーバーから最新のデータをダウンロードするためのダウンロード オプションを提供します。また、非同期ダウンロード タスクは別のクラスにあります。
私の質問は、ダウンロード プロセスが完了したら、メインのアクティビティ スピナーを更新するにはどうすればよいですか?
私のアプリにはメイン アクティビティにスピナーがあり、コンテンツは sqlite から読み込まれます。また、私のアプリは、ユーザーがサーバーから最新のデータをダウンロードするためのダウンロード オプションを提供します。また、非同期ダウンロード タスクは別のクラスにあります。
私の質問は、ダウンロード プロセスが完了したら、メインのアクティビティ スピナーを更新するにはどうすればよいですか?
このようにしてみてください。
1) コールバック インターフェイスを作成する
public interface DownloadCompleted {
// Define your Data type to which you want to store data after AsycTask completion
public void onTaskComplete(String result);
}
2) 非同期タスク
public class UploadAsyncTask extends
AsyncTask<String, Void, String> {
private ProgressDialog Dialog;
String response = "";
Activity _context;
private DownloadCompleted callback;
public UploadAsyncTask (Activity _context) {
this._context = _context;
this.callback = (DownloadCompleted ) _context;
}
@Override
protected void onPreExecute() {
Dialog = new ProgressDialog(_context);
Dialog.setMessage("Loading...");
Dialog.show();
}
@Override
protected String doInBackground(String... urls) {
try {
String url= urls[0];
//Do your operation
} catch (Exception e) {
}
return response ;
}
@Override
protected void onPostExecute(String result) {
Dialog.dismiss();
callback.onTaskComplete(result);
}
}
3) 呼び出し元のアクティビティにインターフェイスを実装します
public class YourActivity extends Activity implements DownloadCompleted {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new UploadAsyncTask (this).execute(YOUR URL String);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.rss_reader, menu);
return true;
}
@Override
public void onTaskComplete(String result) {
// Refresh your view here
// use result data as after completion AsycTask
}
}
詳細なヘルプとソース コードについては、以下のリンクを参照してください。
http://amitandroid.blogspot.in/2013/02/android-rssfeed-with-async-task-example.html