【发布时间】:2014-10-28 12:05:40
【问题描述】:
我在我的应用程序(API 19)中实现了登录 DialogFragment。我正在使用 Retrofit 1.7.1 进行联网。实现如下:
public class SignInDialogFragment extends DialogFragment {
private EditText mUsernameEditText;
private EditText mPasswordEditText;
public static SignInDialogFragment newInstance() {
return new SignInDialogFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Builder builder = new AlertDialog.Builder(getActivity())
.setPositiveButton(R.string.action_sign_in, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String username = mUsernameEditText.getText().toString();
APIFactory.getAPI().register(username, new Callback<RegistrationResponseModel>() {
@Override
public void success(RegistrationResponseModel registrationResponse, Response response) {
Toast.makeText(getActivity(), "Totally worked!", Toast.LENGTH_SHORT).show();
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(getActivity(), "Something failed!", Toast.LENGTH_SHORT).show();
}
});
}
})
.setNegativeButton(R.string.action_cancel, null);
View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_sign_in, null);
builder.setView(view);
mUsernameEditText = (EditText)view.findViewById(R.id.usernameEditText);
return builder.create();
}
}
正如您所料,当getActivity() 命中空引用时,这会在成功或失败时崩溃。 处理此类异步请求的最佳方式是什么,包括在对话框关闭后获取回调?
我想到了几个选项;它们中的任何一个都可行吗?
如果有请求正在进行,我可以简单地保持对话框打开。我没有实现这个,因为我不确定保持对话框的最干净的方式(处理后退按钮等)。
如果对话框关闭,我真的很想取消请求,但我不能,因为there is not currently a way to cancel Retrofit requests。
如果有一个我不知道的选项,我想听听。
【问题讨论】: