catch 블록에있는 사용자에 대한 경고 메시지를 표시하려고합니다. 차이점은 내 try/catch는 주 활동의 onCreate()
안에 있으므로 애플리케이션이 열리 자마자 실행됩니다.예외를 catch하는 동안 Android에서 맞춤 AlertDialog 표시
나는 (내가 dialog.dismiss()
와 this.finish()
와 활동의 종료 후에서 대화 상자에 대한 OnClick()
이)이 시도했습니다
catch (SQLException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_sql))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialogSQL = builder.create();
dialogSQL.show();
e.printStackTrace();
}
나는이 시도 :
catch (NumberFormatException e) {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(getString(R.string.label_title_error));
dialog.setIcon(R.drawable.error_icon);
dialog.setMessage(getString(R.string.msg_error_numberformat));
dialog.setNeutralButton(getString(R.string.label_ok), null);
dialog.create().show();
e.printStackTrace();
}
가 강제를 디버깅하는 동안 예외가 발생하고 단순히 예외를 잡아서 LogCat에 경고로 표시하고 다른 처리되지 않은 예외가 발생할 때까지 흐름을 유지 한 다음 기본 "죄송합니다/강제 종료"Android 대화 상자를 표시하는 것을 볼 수 있습니다. LogCat의 대화 상자와 관련된 다른 예외는 없습니다.
캐치에 대한 내 AlertDialog가 표시되지 않는 이유는 무엇입니까? 작성자가 필요로하는 컨텍스트에 대해 생각했지만 onCreate()
의 super()
이이 코드보다 앞에있는 이유는 무엇입니까?
감사합니다. 모두들.
업데이트 : 요청에 따라 여기에 더 많은 코드가 표시됩니다.
public class PinActivity extends Activity implements OnClickListener, android.content.DialogInterface.OnClickListener{
private Facade facade = null;
public static int INSERT_SAL = 0;
public static int INSERT_OK = 1;
public static int INSERT_CANCEL = 2;
EditText edtIniPin;
TextView txtSelecPin;
TextView txtCancPin;
int pinMaxLengthInt;
private String[] serviceNames;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.v("FLUXO", "PIN -->> ON CREATE");
super.onCreate(savedInstanceState);
facade = Facade.getInstance();
try {
serviceNames = facade.loadApplication(this);
facade.loadParameters(0);
setContentView(R.layout.pin_screen);
//Instanciando Views da Tela
edtIniPin = (EditText) findViewById(R.id.editTextPin);
txtSelecPin = (TextView) findViewById(R.id.btn_select_pin);
txtCancPin = (TextView) findViewById(R.id.btn_cancel_pin);
pinMaxLengthInt = Facade.getInstance().getPinSize();
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(pinMaxLengthInt);
edtIniPin.setFilters(FilterArray);
edtIniPin.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (edtIniPin.getText().length() > 0) {
txtCancPin.setText(getString(R.string.btn_clean));
}
else if (edtIniPin.getText().length() == 0){
txtCancPin.setText(getString(R.string.btn_exit));
}
else if (edtIniPin.getText().length() == Facade.getInstance().getPinSize()){
edtIniPin.setEnabled(false);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
} catch (SQLException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_sql))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialogSQL = builder.create();
dialogSQL.show();
e.printStackTrace();
} catch (CorruptedAppException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_corrupted))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialogCorrupted = builder.create();
dialogCorrupted.show();
e.printStackTrace();
} catch (NoServiceAvailableException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_noservice))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialogNoService = builder.create();
dialogNoService.show();
e.printStackTrace();
} catch (NumberFormatException e) {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(getString(R.string.label_title_error));
dialog.setIcon(R.drawable.error_icon);
dialog.setMessage(getString(R.string.msg_error_numberformat));
dialog.setNeutralButton(getString(R.string.label_ok), null);
dialog.create().show();
e.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v("FLUXO", "PIN -->> ON ACTIVITY RESULT");
if (resultCode == INSERT_OK) {
String[] initCode = (String[]) data.getSerializableExtra("init_code");
try {
Facade.getInstance().insertInitCode(serviceNames[0], initCode, this);
} catch (NumberFormatException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_numberformat))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialog = builder.create();
dialog.show();
e.printStackTrace();
} catch (SQLException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_sql))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialog = builder.create();
dialog.show();
e.printStackTrace();
} catch (CorruptedAppException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_corrupted))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialog = builder.create();
dialog.show();
e.printStackTrace();
}
}
else if (resultCode == INSERT_CANCEL){
this.finish();
}
}
@Override
protected void onStart() {
Log.v("FLUXO", "PIN -->> ON START");
super.onStart();
txtSelecPin.setOnClickListener(this);
txtCancPin.setOnClickListener(this);
}
@Override
protected void onResume() {
Log.v("FLUXO", "PIN -->> ON RESUME");
super.onResume();
if (!facade.isInitialized(serviceNames[0], this)) {
Intent itInicial = new Intent(this, InitialActivity.class);
startActivityForResult(itInicial, INSERT_SAL);
}
}
@Override
protected void onStop() {
Log.v("FLUXO", "PIN -->> ON STOP");
super.onStop();
}
@Override
protected void onPause() {
Log.v("FLUXO", "PIN -->> ON PAUSE");
super.onPause();
}
@Override
public void onBackPressed() {
Log.v("FLUXO", "PIN -->> ON BACK KEY PRESSED");
super.onBackPressed();
moveTaskToBack(true);
}
@Override
protected void onDestroy() {
Log.v("FLUXO", "PIN -->> ON DESTROY");
super.onDestroy();
}
/**
* Método chama próxima tela
*/
private void nextScreen(){
Log.v("FLUXO", "PIN -->> NEXT SCREEN");
Intent it = new Intent(this, ValueActivity.class);
startActivity(it);
}
@Override
public void onClick(View v) {
//lots of stuff (...)
}
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
System.exit(0);
}
}
당신은 조금 더 많은 코드를 보여줄 수 있을까? 특히 onCreate() 메서드는 흥미로울 것입니다. 또한 코드의 어느 시점에서 다이얼로그를 닫는 것에 대한이 내용은 흥미 롭습니다. 활동주기 호출을 통해 대화 상자를 연 직후 대화 상자를 닫을 수 있습니까? – Stephan
이 스레드를 확인하십시오 http://stackoverflow.com/questions/4371842/progressdialog-problem-during-activiy-oncreatevoid-in-android – ernazm
alertdialog를 표시하기 위해 처리기를 추가하는 방법에 대해 자세히 설명해 줄 수 있습니까? –