【问题标题】:ProgressDialog is not closingProgressDialog 没有关闭
【发布时间】:2017-08-11 08:56:50
【问题描述】:

对此有很多问题,但没有一个问题能解决我的问题。

我有一个活动,当单击一个按钮时,会打开一个新活动。一开始我正在显示一个进度对话框。到目前为止没有任何问题。在这项新活动中,我正在尝试建立蓝牙连接,但这需要很长时间。 (这就是我使用进度对话框的原因)最后我正在运行我创建的侦听器。 (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);
}

}

我该如何解决这个问题,或者我可以使用什么来代替进度对话框?我需要阻止用户访问界面,直到连接完成。

【问题讨论】:

    标签: java android user-interface bluetooth progressdialog


    【解决方案1】:

    像这样使用你的progressDialog:

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

    这样解雇后它的工作

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

    【讨论】:

    • isShowing() 方法返回 false。我放了这样的东西: if (progressDialog.isShowing()){ Log.d(TAG, "PROGRESS DIALOG IS SHOWING"); progressDialog.dismiss(); } else { Log.d(TAG, "进度对话框不显示");在日志部分,我可以看到“PROGRESS DIALOG IS NOT SHOWING”。
    【解决方案2】:

    您应该在 AsyncTask 中调用您的服务,并在 onPostExecute 中调用 progessdialog 关闭。

    你有她的例子。 progressDialog in AsyncTask

    【讨论】:

    • bluetoothConnectionService 是我处理连接的 java 类。
    • 我应该把这个 AsyncTask 放在活动中吗?
    • 是的,公共类 AnaEkranActivity 扩展 AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { mserviceBth = new SeviceBth(任何信息);} 公共类 SeviceBth 扩展 AsyncTask { . .. }
    • 我在 int 和 boolean 不被接受处有一个错误。它说“类型参数不能是原始类型”。
    • 它只是我的代码的一个例子,但你应该使用这个链接来制作你的 asyncTask stackoverflow.com/questions/4538338/progressdialog-in-asynctask
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多