如何从此错误处理类中启动Android中的新活动?

时间:2016-02-26 12:18:49

标签: android android-intent android-activity parse-platform android-context

我研究的越多,我就越困惑。我承认我对这个Android的东西很新。也许有人可以在我的具体问题的背景下向我解释这一点。

在Android应用中,我有一个主要活动。这是来自所述活动的相关代码。

installation.saveInBackground(new SaveCallback() {
        public void done(ParseException e) {
            if (e == null) {
                Log.v("PRBTEST","Successful save of installation");
            } else {
                Log.v("PRBTEST","Unsuccesfull save of installation: " + e.getMessage());

                ParseErrorHandler.handleParseError(e);
            }
        }

此代码面向onCreate()函数的末尾,旨在解决会话令牌无效的Parse.com(我们的后端服务器)的问题。错误处理程序应该检查错误,并根据错误的类型,做一些事情。现在我们只有一个上下文,这是会话令牌错误。作为回应,它会弹出一个告诉您再次登录的弹出窗口,并将您发送回启动界面,您可以登录。

这是错误处理程序类。

public class ParseErrorHandler {

public static void handleParseError(ParseException e) {
    switch(e.getMessage()) {
        case "invalid session token": handleInvalidSessionToken();
                break;
    }
}

private static void handleInvalidSessionToken() {
    AlertDialog.Builder alert = new AlertDialog.Builder(//...);

    alert.setMessage("Oops! Your session is no longer valid. Please sign in again.")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    revertToSignIn();
                }
            });
    alert.create().show();
}

private static void revertToSignIn() {
    ParseUser.logOut();

    Global.loggedIn = false;
    Global.user = ParseUser.getCurrentUser();

    Intent intent = new Intent(//..., ActivityStartup.class);
    startActivity(intent); //<<this line can't be resolved at the moment
    finish(); //<<this line can't be resolved at the moment
}

} 这里有几个问题。我知道我必须将某种上下文传递给ParseErrorHandler中的方法,这样它们就可以用在当前用//替换的参数中。问题是我不了解我的生活这些背景是什么以及它们是如何工作的,每一个在线解释都变得越来越抽象。我认为上下文基本上只是调用Intent或AlertDialog的Activity,但这一定不正确。

另一个问题是,无法从ParseErrorHandler解析revertToSignIn()中激活意图的最后几行。这些似乎应该是相对基本的问题,但有人可以向我清楚解释一下吗?

3 个答案:

答案 0 :(得分:1)

  

我不了解我的生活这些背景是什么以及如何   他们的工作和每个在线解释越来越多   抽象。

这里是我获得有关上下文的非常好的信息,会帮助你。

What is 'Context' on Android?

http://developer.android.com/reference/android/content/Context.html

对于您的问题,首先在主要活动中创建上下文,然后执行

    private Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_all_category);
        context = this;
       .
       .
       .
       .
       .
       installation.saveInBackground(new SaveCallback() {
            public void done(ParseException e) {
                if (e == null) {
                    Log.v("PRBTEST","Successful save of installation");
                } else {
                    Log.v("PRBTEST","Unsuccesfull save of installation: " + e.getMessage());

                    ParseErrorHandler handler = new ParseErrorHandler(context);
                    handler.handleParseError(context, e);
                }
            }

现在在ParseErrorHandler.java类中创建构造函数,其中包含上下文,可以帮助您在所有方法中执行类似的操作,

private Context context;
    public class ParseErrorHandler {

        public ParseErrorHandler(Context context) {
            this.context = context;
        }

        // your other code...

        private static void revertToSignIn() {
            ParseUser.logOut();

            Global.loggedIn = false;
            Global.user = ParseUser.getCurrentUser();

            Intent intent = new Intent(context, ActivityStartup.class);
            startActivity(intent); 
            finish(); 
        }
    }

希望能帮助你...... !!

答案 1 :(得分:0)

**Activity:-**
installation.saveInBackground(new SaveCallback() {
        public void done(ParseException e) {
            if (e == null) {
                Log.v("PRBTEST","Successful save of installation");
            } else {
                Log.v("PRBTEST","Unsuccesfull save of installation: " + e.getMessage());

                ParseErrorHandler.handleParseError(e,ActivityName.this);
            }
        }
**ParseClass:**
public class ParseErrorHandler {

public static void handleParseError(ParseException e,Context context) {
    switch(e.getMessage()) {
        case "invalid session token": handleInvalidSessionToken(context);
                break;
    }
}

private static void handleInvalidSessionToken(Context context) {
    AlertDialog.Builder alert = new AlertDialog.Builder(//...);

    alert.setMessage("Oops! Your session is no longer valid. Please sign in again.")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    revertToSignIn(context);
                }
            });
    alert.create().show();
}

private static void revertToSignIn(Context context) {
    ParseUser.logOut();

    Global.loggedIn = false;
    Global.user = ParseUser.getCurrentUser();

    Intent intent = new Intent(context, ActivityStartup.class);
    context.startActivity(intent); //<<this line can't be resolved at the moment
   context. finish(); //<<this line can't be resolved at the moment
}

答案 2 :(得分:0)

根据上面的两个答案,我得到了这个最终代码,它与他们的答案相似但不同。这编译并跑得很棒!当然还有一些补充。

public class ParseErrorHandler {
public static void handleParseError(ParseException e, Context context) {
    switch(e.getMessage()) {
        case "invalid session token": handleInvalidSessionToken(context);
            break;
        default: handleGeneralError(e, context);
            break;
    }
}

private static void handleInvalidSessionToken(final Context context) {
    AlertDialog.Builder alert = new AlertDialog.Builder(context);

    alert.setMessage("Oops! Your session is no longer valid. Please sign in again.")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    revertToSignIn(context);
                }
            });
    alert.create().show();
}

private static void handleGeneralError(ParseException e, Context context) {
    AlertDialog.Builder alert = new AlertDialog.Builder(context);

    alert.setMessage("Oops! Fitness Evolution had a server issue.\n\nError: " + e.getMessage() +
            "\n\nSome functionality may be temporarily unavailable. We apologize for the inconvenience")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //If you want OK button to do anything special, put it here
                }
            });
    alert.create().show();
}

private static void revertToSignIn(Context context) {
    ParseUser.logOut();

    Global.loggedIn = false;
    Global.user = ParseUser.getCurrentUser();

    Intent intent = new Intent(context, ActivityStartup.class);
    context.startActivity(intent);
}
}

ActivityMain.class中的代码是:

 Log.v("parse installation", "updating user");
    ParseInstallation installation = ParseInstallation.getCurrentInstallation();
    installation.put("user", Global.user.getUsername());
    installation.saveInBackground(new SaveCallback() {
        public void done(ParseException e) {
            if (e == null) {
                Log.v("PRBTEST","Successful save of installation");
            } else {
                Log.v("PRBTEST","Unsuccessful save of installation: " + e.getMessage());

                ParseErrorHandler.handleParseError(e, ActivityMain.this);
            }
        }
    });

    Log.v("parse installation", "updated user: " + ParseInstallation.getCurrentInstallation().get("user"));

我没有意识到的一件大事是我必须从上下文中调用.startActivity。与context.startActivity().

一样

谢谢你们。