简体   繁体   English

活动未等待警报对话框

[英]Activity is not waiting for alert dialog

I am actually a C# developer but currently developing an app for an android with java. 我实际上是C#开发人员,但目前正在使用Java为Android开发应用程序。

Well,I wanted to create a general dialog alert class and has a static method that is given title,message as parameter and shows an alert. 好吧,我想创建一个通用的对话框警报类,并有一个静态方法,该方法给出标题,消息作为参数并显示警报。 it seems everything OK. 似乎一切正常。 Here is the my class.. 这是我的课..

public class AlertDialogHelper  {

public static void setOkMessage(Context context,String title,String message)
{

    AlertDialog dialog = new AlertDialog.Builder(context).create();
    dialog.setTitle(title);
    dialog.setMessage(message);
    dialog.setButton("OK", new DialogInterface.OnClickListener()  {

        @Override
        public void onClick(DialogInterface dialog, int which) {

             // NOTHING??

        }
    });     

    dialog.setIcon(R.drawable.logo);
    dialog.show();
 }
}

and I called this static method in my splashactivity, but when alert dialog appeared, after code is going on that means execute codes below.. 然后在我的启动活动中调用了此静态方法,但是当出现警告对话框时,在执行代码之后,这意味着请执行以下代码。

private void closeSplashActivity() {

 Intent activity;
 boolean isNew=true;

  try{

    DbHelper dbHelper = new DbHelper(this);
    dbHelper.openDbConnection();
    isNew = dbHelper.getSettings(DbContext.COLUMN_ISNEW);
    dbHelper.closeDbConnection();

   if (isNew)
   AlertDialogHelper.setOkMessage(this, "XXX", "YYYY");

   else
       AlertDialogHelper.setOkMessage(this, "XXXXX", "YYYYY");



 } catch (Exception ex) {

AlertDialogHelper.setOkMessage(this, "Error", "XXXXX:" + ex.getMessage());
        ex.printStackTrace();
 }

   if(isNew) 
   activity = new Intent(SplashActivity.this, ChooseQualityActivity.class); 

   else 
   activity = new Intent(SplashActivity.this, HomeActivity.class);

   startActivity(activity);
   finish();

 }

Normally, It must wait for the onclick event and after that 通常,它必须等待onclick事件,之后

    if(isNew) 
   activity = new Intent(SplashActivity.this, ChooseQualityActivity.class);

must work.. but, it doesnt wait and run this code above.. So, I do not know what I can do it for it.. And Is there another method for creating general dialog box? 必须工作..但是,它不会等待并运行上面的代码。.所以,我不知道该怎么做。.还有创建常规对话框的另一种方法吗? Because it looks so long code to create for each message. 因为看起来很长的代码才能为每个消息创建。

@Edit.. @编辑..

I have just realized that some exception in logcat 我刚刚意识到logcat中有一些异常

01-30 23:07:47.375: E/WindowManager(9191): Activity com.aaa.bbbb.SplashActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{2c12e008 VE.... R.....ID 0,0-348,285} that was originally added here 01-30 23:07:47.375: E/WindowManager(9191): android.view.WindowLeaked: Activity com.aaa.bbbb.SplashActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{2c12e008 VE.... R.....ID 0,0-348,285} that was originally added here 01-30 23:07:47.375: E/WindowManager(9191): at android.view.ViewRootImpl.(ViewRootImpl.java:354) 01-30 23:07:47.375: E/WindowManager(9191): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216) 01-30 23:07:47.375: E/WindowManager(9191): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 01-30 23:07:47.375: E/WindowManager(9191): at android.app.Dialog.show(Dialog.java:281) 01-30 23:07:47.375: E/WindowManager(9191): at com.aaa.bbbb.utility.AlertDialogHelper.setOkMessage(AlertDialogHelper.j 01-30 23:07:47.375:E / WindowManager(9191):活动com.aaa.bbbb.SplashActivity已泄漏窗口com.android.internal.policy.impl.PhoneWindow $ DecorView {2c12e008 VE .... R .. ... ID 0,0-348,285}最初是在此处添加的01-30 23:07:47.375:E / WindowManager(9191):android.view.WindowLeaked:活动com.aaa.bbbb.SplashActivity已泄漏window com。 android.internal.policy.impl.PhoneWindow $ DecorView {2c12e008 VE .... R ..... ID 0,0-348,285}最初是在此处添加的01-30 23:07:47.375:E / WindowManager(9191 ):位于android.view.ViewRootImpl。(ViewRootImpl.java:354)01-30 23:07:47.375:E / WindowManager(9191):位于android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)01-30 23:07:47.375:E / WindowManager(9191):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)01-30 23:07:47.375:E / WindowManager(9191):在android.app.Dialog .show(Dialog.java:281)01-30 23:07:47.375:E / WindowManager(9191):at com.aaa.bbbb.utility.AlertDialogHelper.setOkMessage(AlertDialogHelper.j ava:31) 01-30 23:07:47.375: E/WindowManager(9191): at com.aaa.bbbb.SplashActivity.closeSplashActivity(SplashActivity.java:65) 01-30 23:07:47.375: E/WindowManager(9191): at com.aaa.bbbb.SplashActivity.access$0(SplashActivity.java:53) 01-30 23:07:47.375: E/WindowManager(9191): at com.aaa.bbbb.SplashActivity$1.onCompletion(SplashActivity.java:40) 01-30 23:07:47.375: E/WindowManager(9191): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1980) 01-30 23:07:47.375: E/WindowManager(9191): at android.os.Handler.dispatchMessage(Handler.java:99) 01-30 23:07:47.375: E/WindowManager(9191): at android.os.Looper.loop(Looper.java:137) 01-30 23:07:47.375: E/WindowManager(9191): at android.app.ActivityThread.main(ActivityThread.java:5039) 01-30 23:07:47.375: E/WindowManager(9191): at java.lang.reflect.Method.invokeNative(Native Method) 01-30 23:07:47.375: E/WindowManager(9191): at java.lang.reflect.Method.invoke(Method.java:511) 01-30 23:07:47.375: E/WindowManager(9191): at com. ava:31)01-30 23:07:47.375:E / WindowManager(9191):在com.aaa.bbbb.SplashActivity.closeSplashActivity(SplashActivity.java:65)01-30 23:07:47.375:E / WindowManager( 9191):在com.aaa.bbbb.SplashActivity.access $ 0(SplashActivity.java:53)01-30 23:07:47.375:E / WindowManager(9191):在com.aaa.bbbb.SplashActivity $ 1.onCompletion(SplashActivity .java:40)01-30 23:07:47.375:E / WindowManager(9191):位于android.media.MediaPlayer $ EventHandler.handleMessage(MediaPlayer.java:1980)01-30 23:07:47.375:E / WindowManager (9191):位于android.os.Handler.dispatchMessage(Handler.java:99)01-30 23:07:47.375:E / WindowManager(9191):位于android.os.Looper.loop(Looper.java:137) 01-30 23:07:47.375:E / WindowManager(9191):在android.app.ActivityThread.main(ActivityThread.java:5039)01-30 23:07:47.375:E / WindowManager(9191):在Java lang.reflect.Method.invokeNative(本机方法)01-30 23:07:47.375:E / WindowManager(9191):at java.lang.reflect.Method.invoke(Method.java:511)01-30 23:07 :47.375:E / WindowManager(9191):在com。 android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 01-30 23:07:47.375: E/WindowManager(9191): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 01-30 23:07:47.375: E/WindowManager(9191): at dalvik.system.NativeStart.main(Native Method) android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)01-30 23:07:47.375:E / WindowManager(9191):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java :560)01-30 23:07:47.375:E / WindowManager(9191):在dalvik.system.NativeStart.main(本机方法)

Ok, first you have to define an interface like this: 好的,首先您必须定义一个这样的接口:

interface MyCallback {
    void callbackCall();
}

Then in your AlertDialogHelper class include a member, like this: 然后在AlertDialogHelper类中包含一个成员,如下所示:

MyCallback mCallback;

I your set OkMessageMethod add a parameter 我在您设置的OkMessageMethod中添加一个参数

public static void setOkMessage(Context context,String title,String message, MyCallback callback) {
mCallback = callback

later in onClick method you call like this: 稍后在onClick方法中,您将这样调用:

callback.callbackCall();

the rest is easy, just call the setOkMessage this way: 其余的很简单,只需通过以下方式调用setOkMessage即可:

AlertDialogHelper.setOkMessage(this, "Error", "XXXXX:" + ex.getMessage(), new MyCallback(){
 // Here the code you want to execute after the click event
});

hope this helps 希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM