2017-12-04 35 views
0

AsyncTaskを呼び出すリスト要素をクリックすると不確定のprogressDialogを追加しようとしていますが、残念ながらonPreExecuteのダイアログをこのように呼び出した場合:AsyncTaskの後にProgressDialogが表示されない/表示されない

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    dialog.setProgressStyle(R.style.AppTheme_Dark_Dialog); 
    dialog.setIndeterminate(true); 
    dialog.setMessage(activity.getString(R.string.Buscando)); 
    dialog.show(); 
} 

Obs:Asyncがアクティビティクラスのサブクラスではないことに注目して、私はアクティビティをコンストラクタのパラメータとして渡しています。

@Override 
protected void onPostExecute(BuscaPendentesFechamento buscaPendentesFechamento) { 
    super.onPostExecute(buscaPendentesFechamento); 
    if(dialog.isShowing()) 
     dialog.dismiss(); 
} 

ダイアログそれが作成し、呼ばれているが、単純に(アクティビティインスタンスが正しいか、alredyチェックする)、まったく表示されません

と私は上のダイアログを設定した場合活動自体は、のように:

final ProgressDialog progressDialog = new ProgressDialog(RegistraPeso.this, R.style.AppTheme_Dark_Dialog); 
    progressDialog.setIndeterminate(true); 
    progressDialog.setMessage(getString(R.string.Buscando)); 
    progressDialog.show(); 
    BuscaPendentesFechamento exportProjectRequisition = new BuscaPendentesFechamento(getApplicationContext()); 
    response = exportProjectRequisition.execute(nomeEquip,RegistraPeso.this); 
    progressDialog.dismiss(); 

ダイアログUIで示しているが、AsyncTaskはalredy行われず、それが呼び出される前に、そしてコードによれば、特開昭であるべきである後にのみAsyncが作成される前にウィングが作成されます。

どうすればよいですか?私は間違って何をしていますか?助けてください。

編集:ダイアログが作成された場所を追加しました:

private ProgressDialog dialog; 
private RegistraPeso activity; 
BuscaPendentesFechamento(RegistraPeso activity) { 
    this.dialog = new ProgressDialog(activity); 
    this.activity = activity; 
} 

編集:追加されましたdoInBackground:

@Override 
protected BuscaPendentesFechamento doInBackground(String... params) { 
    ArrayList<UmData> jsonArrayResponse = JSONParser.makeHttpRequestArray(
      Constants.URL_PENDENTES_FECHAMENTO, 
      Constants.METHOD_POST, requisition.writeJSON(params[0]), 
      requisition.getContext()); 
    if(jsonArrayResponse!=null) 
    requisition.setJsonArrayResponse(jsonArrayResponse); 
    else { 
     UmData umData = new UmData(); 
     umData.setItemUm("Server not responding"); 
     jsonArrayResponse = new ArrayList<>(); 
     jsonArrayResponse.add(umData); 
     requisition.setJsonArrayResponse(jsonArrayResponse); 
    } 
    return requisition; 
} 
+1

コンテキストをAsycTaskに渡す場所にコードを投稿します。私はonPreExecute()でダイアログの作成が表示されません。 – ADM

+0

[this](https://stackoverflow.com/a/4538370/2910520)や[this](https://stackoverflow.com/a/3893691/2910520)などの回答を確認しましたか? – MatPag

+0

2番目の解決策は、それが価値あるものをやっていないので役に立たない。 –

答えて

0

アプリケーションコンテキストは、この場合には動作しないでしょう。

BuscaPendentesFechamento exportProjectRequisition = new BuscaPendentesFechamento(YourActivity.this); 

BuscaPendentesFechamento exportProjectRequisition = new BuscaPendentesFechamento(getApplicationContext()); 

以下の行を置き換え、私は(あなたが却下呼び出しているあなたのコードを参照してください)直後()を実行します。この行を削除します。

progressDialog.dismiss(); 
+0

ありがとう、それは何も変わっていませんでした:( –

+0

)問題はありません.2番目のオプションの場合、私はどこでdomiss()を呼び出してすぐにexecute()を呼び出しますか、ダイアログは表示を停止しません。 –

+0

おそらくasynctaskでグローバルとしてのアクティビティ参照。上のコードは動作するはずです.thx – ADM

0

ここでOP、問題は、[この]に基づいてコードを変更することで解決した[1]

[1]:@MikeMによって私に送られ、ここでHow to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?ポストは、問題は、私ということでしたAsyncTaskから.get()を使用して応答を取得していましたが、AsyncをSyncronousタスクに変換していました。 マイクのサポートありがとう!

関連する問題