2016-07-26 15 views
0

私はProgress Dialogを初めて使っています。 class DBOperations extends AsyncTaskを作成し、methods onPreExecuteonPostExecuteを実装しました。私は私がnewHandler().postDelayedを使用すべきProgressDialog - ダイアログが表示されません

@Override 
protected void onPreExecute() { 
    ProgressDialog dialog = new ProgressDialog(context); 
    dialog.setCancelable(false); 
    dialog.setMessage("Please Wait ..."); 
    dialog.show(); 
} 

@Override 
protected void onPostExecute(Object o) { 
    if(dialog != null && dialog.isShowing()) { 
     dialog.dismiss(); 
    } 
} 

ように見えるDBは完全に呼び出さ

newDBOperations().execute(...); 

よう onPreExecuteonPostExecuteメソッドを呼び出しますが、私はコード

私のエミュレータ上で Progress Dialogを見ることができませんでした作られました?事前に

おかげで...

+0

DB操作とは、Web APIの呼び出しを意味しますか? – sJy

+0

私は忘れています(そして、ドキュメントは言っていません): 'ProgressDialog'は' Builder'ネストされたクラスを持っていますか?もしそうなら、あなたがする必要があるのです – Jeeter

+0

'@sJy'私は 'MYSQL'に連絡してレコードを取得するために' PHP'を使います。私は 'DBOperations'を使って' PHP'からデータを取得します –

答えて

0

は私が分離されたアプリケーションにこのコードを入れて、そしてそれは、ダイアログ示した:私はあなたのcontext変数を置き換える以外、それはあなたが使用してまったく同じコードだ

ProgressDialog dialog = new ProgressDialog(MainActivity.this); 
dialog.setCancelable(false); 
dialog.setMessage("Please Wait ..."); 
dialog.show(); 

MainActivity.this

あなたが使用している変数は問題です。正しいContextを使用していることを確認してください。 @MdSufiKhanはコメントで指摘したようにまた


、あなたは onPreExecute()でそれをローカルに作成するので、それを適切に解雇することはできません。 DBOperations

+0

'@ Jeeter'私は' MainActivity 'を渡しました。これは 'MainActivity'から'サービス層 '、次に' DAO層 '、' DBOperations'の順です。 'DBOperations'では、私はあなたの答えで提案した上記のコードを使用しましたが、使用しません。 –

+0

' class level'で 'dialog object'を作成し、' onPreExecute() 'で初期化し、' onPostExecute() 'で閉じました。 –

1

これは私のやり方です。私のために良い作品。

メインActivity.java

public class MainActivity extends AppCompatActivity { 

Button button; 
DBOperations task; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button = (Button) findViewById(R.id.button); // declared in xml 
    button.setOnClickListener(new View.OnClickListener() { // starts AsyncTask on button click 
     @Override 
     public void onClick(View v) { 
      task = new DBOperations(MainActivity.this); // pass the context to the constructor 
      task.execute(); 
     } 
    }); 
} 

}

そしてDBOperations.java

public class DBOperations extends AsyncTask<Void, Void, Void> { 

Context ctx; 
ProgressDialog dialog; // should be declared outside onPreExecute 

public DBOperations(Context ctx) { 
    this.ctx = ctx; 
} 

@Override 
protected void onPreExecute() { 
    dialog = new ProgressDialog(ctx); 
    dialog.setCancelable(false); 
    dialog.setMessage("Please Wait ..."); 
    dialog.show(); 
    super.onPreExecute(); 
} 

@Override 
protected Void doInBackground(Void... params) { 
    try { 
     Thread.sleep(3000); // waits 3 seconds 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(Void aVoid) { 
    if(dialog != null && dialog.isShowing()) 
     dialog.dismiss(); 
    super.onPostExecute(aVoid); 
} 

}

希望はこのことができます:)

+0

'@ Artur'あなたの答えの違いは、' super'メソッド( 'onPreExecute()'と 'onPostExecute()')です。私もそれを試みたが使用しなかった –

関連する問題