我研究的越多,我就越困惑。我承认我对这个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()中激活意图的最后几行。这些似乎应该是相对基本的问题,但有人可以向我清楚解释一下吗?
答案 0 :(得分:1)
我不了解我的生活这些背景是什么以及如何 他们的工作和每个在线解释越来越多 抽象。
这里是我获得有关上下文的非常好的信息,会帮助你。
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().
谢谢你们。