/ / onKeyDown stackoverflowerror Android - java, android, stack-overflow

onKeyDown stackoverflowerror Android - java, android, stack-overflow

Za każdym razem, gdy naciskam przyciski przez dłuższy czas (w tym przypadku robię zrzut ekranu z mocą i mniejszą głośnością), moja aplikacja ulega awarii za pomocą StackOverFlowError.

Jestem prawie pewien, że musi sobie poradzić z tym, żePróbowałem zmniejszyć ilość zduplikowanego kodu w moim projekcie i jestem pewien, że wiem dlaczego, nie mam pojęcia, czy można go naprawić na mojej klasie Utilities, czy też powinienem tego nie robić. Powodem, dla którego to robię, jest to, że nie chcę ciągle mieć dużych ilości kodu dla bardzo prostego okna dialogowego.

Klasa narzędzi

public static boolean onKeyDown(final Activity activity, final Class<?> action, String message, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
ParseUser.logOut();
if (action == null) {
activity.onBackPressed();
return;
}
Intent intent = new Intent(activity, action);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(intent);
break;

case DialogInterface.BUTTON_NEGATIVE:
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(message).setPositiveButton("Yes", dialogClickListener).setNegativeButton("No", dialogClickListener).show();
return true;
}
return activity.onKeyDown(keyCode, event);
}

I jak to nazywam:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return Utilities.onKeyDown(this, null, "Do you want to exit the application", keyCode, event);
}

Dziennik kot stale zmienia te linie:

at com.x.y.Login.onKeyDown(Login.java:187)
com.x.y.Utilities.onKeyDown(Utilities.java:45)

Jakieś pomysły?

Odpowiedzi:

1 dla odpowiedzi № 1

Proste rozwiązanie:

Utilities.java

/**
*  @return true if keyEvent is consumed
*/
public static boolean onKeyDown(final Activity activity, final Class<?> action, String message, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

//...all you code here

return true;
}
return false;
}

Login.java

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(Utilities.onKeyDown(this, null, "Do you want to exit the application", keyCode, event)){
return true;
}
return super.onKeyDown(keyCode, event);
}