在 AlertDialog 中创建意图时出错
Error when creating an intent inside of an AlertDialog
我正在制作一个应用程序,让用户可以在 Parse.com 上注册。我为注册制作了对话框只是为了在应用程序中添加更流畅的感觉。因此,例如,在他们单击 "sign up" 之后。我想让它把它们带到 HomescreenActivity....所以我在我的对话框中做了一个意图。我知道它是一个 class 并且没有上下文......但是我如何在其中做出意图? getContext() 不可用,getActivity() 给我一个错误。我将 post 下面的代码。谢谢。
public class SignUpDialog extends DialogFragment {
private View v;
private LayoutInflater inflater;
private EditText adressEditText, fullnameEditText , passwordEditText , usernameEditText;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
inflater = getActivity().getLayoutInflater();
v = inflater.inflate(R.layout.sign_up_dialog_layout , null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(v).setPositiveButton("Sign Up!" , new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fullnameEditText = (EditText) v.findViewById(R.id.fullNameEditTextLayout);
passwordEditText = (EditText) v.findViewById(R.id.passwordEditTextLayout);
usernameEditText = (EditText) v.findViewById(R.id.usernameEditTextLayout);
adressEditText = (EditText) v.findViewById(R.id.addressEditTextLayout);
String username = usernameEditText.getText().toString().trim();
String password = usernameEditText.getText().toString();
String address = adressEditText.getText().toString();
Toast.makeText(getActivity() , "We are signing you u now!" , Toast.LENGTH_SHORT).show();
ParseUser user = new ParseUser();
user.setUsername(username);
user.setPassword(password);
user.put("address", address);
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
// Hooray! Let them use the app now.
Intent intent = new Intent(getActivity(), HomescreenActivity.class);
getActivity().startActivity(intent);
} else {
// Sign up didn't succeed. Look at the ParseException
// to figure out what went wrong
}
}
});
}
}).setNegativeButton("Cancel" , new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
}
}
这是我遇到的错误
java.lang.NullPointerException
at com.xxx.xxx.dialogs.SignUpDialog.done(SignUpDialog.java:69)
at com.xxx.xxx.dialogs.SignUpDialog.done(SignUpDialog.java:63)
at com.parse.Parse.done(Parse.java:903)
at com.parse.Parse.done(Parse.java:900)
at com.parse.Parse.run(Parse.java:944)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
在 Fragments 中你需要空检查 getActivity()
因为 Fragment 可以比 Activity.
getActivity()
和 getContext()
的替代方法是:
getApplicationContext()
或者,要创建可在您的应用程序的任何位置使用的上下文,您可以扩展 Application
并创建您的自定义应用程序 class。
在您的自定义应用程序 class 中,您创建了一个静态变量:
private static final CustomApplication INSTANCE;
在CustomApplication's
onCreate()
:
INSTANCE = this;
创建静态方法
public static CustomApplication getInstance() {
return INSTANCE;
}
然后从您应用程序的任何位置获取上下文,您可以调用:
CustomApplication.getInstance()
这是一个上下文。
我正在制作一个应用程序,让用户可以在 Parse.com 上注册。我为注册制作了对话框只是为了在应用程序中添加更流畅的感觉。因此,例如,在他们单击 "sign up" 之后。我想让它把它们带到 HomescreenActivity....所以我在我的对话框中做了一个意图。我知道它是一个 class 并且没有上下文......但是我如何在其中做出意图? getContext() 不可用,getActivity() 给我一个错误。我将 post 下面的代码。谢谢。
public class SignUpDialog extends DialogFragment {
private View v;
private LayoutInflater inflater;
private EditText adressEditText, fullnameEditText , passwordEditText , usernameEditText;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
inflater = getActivity().getLayoutInflater();
v = inflater.inflate(R.layout.sign_up_dialog_layout , null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(v).setPositiveButton("Sign Up!" , new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
fullnameEditText = (EditText) v.findViewById(R.id.fullNameEditTextLayout);
passwordEditText = (EditText) v.findViewById(R.id.passwordEditTextLayout);
usernameEditText = (EditText) v.findViewById(R.id.usernameEditTextLayout);
adressEditText = (EditText) v.findViewById(R.id.addressEditTextLayout);
String username = usernameEditText.getText().toString().trim();
String password = usernameEditText.getText().toString();
String address = adressEditText.getText().toString();
Toast.makeText(getActivity() , "We are signing you u now!" , Toast.LENGTH_SHORT).show();
ParseUser user = new ParseUser();
user.setUsername(username);
user.setPassword(password);
user.put("address", address);
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
// Hooray! Let them use the app now.
Intent intent = new Intent(getActivity(), HomescreenActivity.class);
getActivity().startActivity(intent);
} else {
// Sign up didn't succeed. Look at the ParseException
// to figure out what went wrong
}
}
});
}
}).setNegativeButton("Cancel" , new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
}
}
这是我遇到的错误
java.lang.NullPointerException
at com.xxx.xxx.dialogs.SignUpDialog.done(SignUpDialog.java:69)
at com.xxx.xxx.dialogs.SignUpDialog.done(SignUpDialog.java:63)
at com.parse.Parse.done(Parse.java:903)
at com.parse.Parse.done(Parse.java:900)
at com.parse.Parse.run(Parse.java:944)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
在 Fragments 中你需要空检查 getActivity()
因为 Fragment 可以比 Activity.
getActivity()
和 getContext()
的替代方法是:
getApplicationContext()
或者,要创建可在您的应用程序的任何位置使用的上下文,您可以扩展 Application
并创建您的自定义应用程序 class。
在您的自定义应用程序 class 中,您创建了一个静态变量:
private static final CustomApplication INSTANCE;
在CustomApplication's
onCreate()
:
INSTANCE = this;
创建静态方法
public static CustomApplication getInstance() {
return INSTANCE;
}
然后从您应用程序的任何位置获取上下文,您可以调用:
CustomApplication.getInstance()
这是一个上下文。