SplashアクティビティにAsyncTaskを追加しようとしています - AsyncTask doInBackground()
はFirebaseからDB情報(JSON)をダウンロードし、DBを更新します。AsyncTaskとUpdating DBを使用するとUIがフリーズする
データが更新され、スプラッシュアクティビティが次のアクティビティに進むまで、ProgressDialog
を使用しようとしています。私がonPostExecute()
で却下した場合、ProgressDialog
は表示されません。
私はdismiss()
アクションを削除すると表示されますが、ProgressDialog
がフリーズしていることがわかります。明らかに、私のコードでは何かが正しくありません。
私はAndroid開発で非常に新しいです。助けてください。
付属コード:
public class NationalSplashActivity2 extends Activity {
NationalDatabaseHelper NationalDB;
xDatabaseHelper xDB;
Cursor cursor;
String default_league;
private ProgressDialog mProgressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.national_activity_splash);
final ImageView iv = (ImageView) findViewById(R.id.nationalimageViewSplashScreen);
BackgroundTask backgroundtask = new BackgroundTask(NationalSplashActivity2.this);
backgroundtask.execute();
Thread startTimer = new Thread(){
public void run(){
sleep(2000);
}catch (InterruptedException e){
e.printStackTrace();
}
};
startTimer.start();
}
class BackgroundTask extends AsyncTask<String,String,String> {
Context ctx;
NationalDatabaseHelper NationalDB;
xDatabaseHelper SecDB;
BackgroundTask (Context ctx){
this.ctx = ctx;
mProgressDialog = new ProgressDialog(ctx);
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(true);
}
@Override
protected void onPreExecute() {
//super.onPreExecute();
mProgressDialog.show();
}
@Override
protected String doInBackground(String... params) {
NationalAllGamesUpdate();
xAllGamesUpdate();
return "";
}
@Override
protected void onProgressUpdate(String... progress) {
super.onProgressUpdate(progress);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}
}
firebaseからデータを取得し、firebaseの新しいデータで自分のDBを更新します。 asynctaskは両方のためのものです - 特にdb更新操作には時間がかかります(3〜4秒)。この操作はうまくいきます。 asynctaskでデータを疲労させながら私のスプラッシュスクリーンを維持することができますか? – Smoker09
データがデータベースに挿入された後にスプラッシュ画面を終了することができます。あなたの挿入は同期的か非同期的でしたか?もし同期があれば、コード行を挿入した後で新しいアクティビティを開始してください。そうでない場合は、カスタムインターフェイスを使用して処理が完了したときに通知することができます。 –
どうすればそのシンクロナスなのか分かりますか?どのように私はそれのためのカスタムインターフェイスを使用するのですか? yooさんは、例または前に質問された質問を提供していただけますか?ありがとう! – Smoker09