2017-08-11 10 views
-2

これについては多くの質問がありますが、いずれも私の場合の解決策はありません。ProgressDialogが閉じていない

私はアクティビティを持っていますが、ボタンをクリックすると新しいアクティビティが開きます。最初は進捗ダイアログを表示しています。これまで何も間違っていません。この新しい活動では、私はBluetooth接続をしようとしており、長い時間がかかります。 (これが私が進捗ダイアログを使う理由です)最後に、私が作成したリスナーを実行しています。 (onSucces & onFailed)リスナーが実行されると、結果の成功または失敗のいずれかで接続が行われたことを意味します。この時点(接続が完了した後)の後、進行状況ダイアログを閉じようとしていますが、進行状況ダイアログは閉じていません。ここに私のコードは次のとおりです。

public class AnaEkranActivity extends AppCompatActivity { 
private static final String TAG = "AnaEkranActivity"; 
private static final String FEEDBACK_OK = "ok$"; 
private static final String FEEDBACK_ERR = "err$"; 
BluetoothConnectionService bluetoothConnectionService; 
BluetoothAdapter bluetoothAdapter; 
BluetoothDevice bluetoothDevice; 
ProgressDialog progressDialog; 
ButtonOnClickLstnr lstnr1; 
ButtonOnClickLstnr lstnr2; 
ButtonOnClickLstnr lstnr3; 
ButtonOnClickLstnr lstnr4; 
String address; 
String tarihSaatString; 
String acilDurdurString; 
Button acilDurdurButton; 
Button manuelButton; 
Button ayarlarButton; 
Button bioGuyAktivatorButton; 
public static AnaEkranActivity instance; 
Handler handler; 
SendMessage sndmsg; 
String readMessage; 
Date nowDate; 
DateFormat dateFormat; 
DateFormat dateFormat2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_ana_ekran); 

    Log.d(TAG, "is started."); 

    progressDialog = new ProgressDialog(AnaEkranActivity.this); 
    progressDialog.show(AnaEkranActivity.this, "Cihaza bağlanılıyor", "Lütfen bekleyiniz..."); 

    instance = this; 

    handler = new Handler(); 

    nowDate = new Date(); 
    dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 
    dateFormat2 = new SimpleDateFormat("hh.mm.ss"); 

    Intent intent = getIntent(); 
    address = intent.getStringExtra("Device Address"); 

    tarihSaatString = "tarih:" + dateFormat.format(nowDate) + ";saat:" + dateFormat2.format(nowDate) + "$"; 
    acilDurdurString = "mode:stop$"; 
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    bluetoothDevice = bluetoothAdapter.getRemoteDevice(address); 
    manuelButton = (Button) findViewById(R.id.manuelButton); 
    ayarlarButton = (Button) findViewById(R.id.ayarlarButton); 
    acilDurdurButton = (Button) findViewById(R.id.aciDurdurButton); 
    bioGuyAktivatorButton = (Button) findViewById(R.id.bioGuyAktivatorButton); 

    bluetoothConnectionService = BluetoothConnectionService.getInstanceBCS(); 
    bluetoothConnectionService.setDevice(bluetoothDevice); 
    bluetoothConnectionService.startClient(); 
    bluetoothConnectionService.setOnBluetoothConnectingListener(new BluetoothConnectionService.OnBluetoothConnectingListener() { 
     @Override 
     public void onSuccess() { 
      progressDialog.dismiss(); 
      Log.d(TAG, "Connection is successfull."); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(AnaEkranActivity.this, "Bağlantı başarıyla tamamlandı", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      bluetoothConnectionService.connected(); 
      sndmsg = new SendMessage(bluetoothConnectionService, tarihSaatString); 
      sndmsg.sendMessage(); 
     } 

     @Override 
     public void onFailure() { 
      progressDialog.dismiss(); 
      Log.d(TAG, "Connection is failed."); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(AnaEkranActivity.this, "Cihaza bağlanılamadı, lütfen bağlantılarınızı kontrol ederek tekrar deneyiniz.", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      startActivity(BaslangicActivity.class); 
     } 
    }); 

    bluetoothConnectionService.setOnBluetoothConnectionListener(new BluetoothConnectionService.OnBluetoothConnectionListener() { 
     @Override 
     public void onConnectionLost() { 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(AnaEkranActivity.this, "Bağlantı kesildi", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      startActivity(BaslangicActivity.class); 
     } 

     @Override 
     public void onRead() { 
      readMessage = bluetoothConnectionService.getIncomingMessage(); 
      if (readMessage.equals(FEEDBACK_OK)) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(AnaEkranActivity.this, "İşleminiz başarıyla gerçekleştirildi.", Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } else if (readMessage.equals(FEEDBACK_ERR)) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(AnaEkranActivity.this, "İşlem başarısız, lütfen tekrar deneyiniz.", Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } 
    }); 

    lstnr1 = new ButtonOnClickLstnr(bioGuyAktivatorButton); 
    lstnr1.openActivityOnClick(AnaEkranActivity.this, AktivatorActivity.class, address); 

    lstnr2 = new ButtonOnClickLstnr(manuelButton); 
    lstnr2.openActivityOnClick(AnaEkranActivity.this, ManuelActivity.class, address); 

    lstnr3 = new ButtonOnClickLstnr(ayarlarButton); 
    lstnr3.openActivityOnClick(AnaEkranActivity.this, AyarlarActivity.class, address); 

    lstnr4 = new ButtonOnClickLstnr(acilDurdurButton); 
    lstnr4.messageOnClick(bluetoothConnectionService, acilDurdurString); 
} 

public void startActivity(Class activity) { 
    Intent intent = new Intent(AnaEkranActivity.this, activity); 
    startActivity(intent); 
} 

}

どのように私はこの問題を解決することができ、または私が進捗ダイアログの代わりに何を使用することができますか?私は、接続が完了するまで、ユーザーがアクセスできるようにする必要があります。

答えて

0

は、そのようなあなたのprogressDialogを使用します。

progressDialog = new ProgressDialog(this); 
progressDialog.setMessage("Message"); 
progressDialog.setTitle("Title"); 
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
progressDialog.show(); 

後のあなたはAsyncTaskの内側にあなたのサービスを呼び出して、あなたのprogessdialogがあなたのonPostExecute内却下呼び出す必要があり、このようにその作業

if (progressDialog.isShowing()){ 
    progressDialog.dismiss(); 
    progressDialog.cancel(); 
} 
+0

isShowing()メソッドはfalseを返します。私はこのようなものを置く:if(progressDialog.isShowing()){ Log.d(TAG、 "進行中のダイアログが表示されています"); progressDialog.dismiss(); } else { Log.d(TAG、 "進行中のダイアログが表示されません"); }ログセクションでは、「進行中のダイアログが表示されていません」と表示されます。 – Burak

+0

これを試してみてください私の答えは –

+0

です。 – Burak

0

を解任します。

あなたには彼女の例があります。 progressDialog in AsyncTask

+0

bluetoothConnectionServiceは接続の処理を行うJavaクラスです。 – Burak

+0

このAsyncTaskをアクティビティに入れる必要がありますか? – Burak

+0

はい、 パブリッククラスAnaEkranActivityはAppCompatActivityを拡張{ @Override 保護され、ボイドのonCreate(バンドルsavedInstanceState){mserviceBth =新しいSeviceBth(任意の情報);} SeviceBthはAsyncTaskを拡張 パブリッククラス<ボイド、int型、ブール> {...} – Mehdiatique

関連する問題