首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BackEndless.Com -异步登录片段

BackEndless.Com -异步登录片段
EN

Stack Overflow用户
提问于 2016-02-14 19:31:56
回答 2查看 203关注 0票数 0

我使用backendless.com作为我的应用程序的后端。我需要将我的用户登录到一个片段中。我一直收到一个语法错误,说明backendless.com提供的异步登录方法不被识别。它在一项活动中运作得很好。有人知道如何让它在片段中工作吗?下面是错误的屏幕截图:

下面是我的片段的代码:

代码语言:javascript
运行
复制
public class LoginFragment extends Fragment implements View.OnClickListener {
private FragmentTransaction ft;
private Button registerButton, resetButton, loginButton;
EditText userName, password;
private boolean isPopUpOpen;
BackendlessUser userOne = new BackendlessUser();
private static final String PREFS_LOGGED_IN = "AreYouLoggedInFile";

public OnClickedListener listener;
public LogInInterface loggedInListener;

static interface OnClickedListener{
    public void buttonClicked(View v);
}

static interface LogInInterface{
    public void userLoggedIn(boolean loggedIn);
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.listener = (OnClickedListener)activity;
    this.loggedInListener = (LogInInterface)activity;
}

public LoginFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    isPopUpOpen = false;
    if (savedInstanceState!=null){
        if (savedInstanceState.getBoolean("isDialogOpen")){
            resetPopUpWindow();
        }
    }
    View view = inflater.inflate(R.layout.fragment_login, container, false);
    registerButton = (Button)view.findViewById(R.id.register_button);
    resetButton = (Button) view.findViewById(R.id.reset_button);
    password = (EditText)view.findViewById(R.id.fragment_login_password);
    userName = (EditText)view.findViewById(R.id.fragment_login_username);

    loginButton = (Button)view.findViewById(R.id.fragment_login_loginButton);
    registerButton.setOnClickListener(this);
    resetButton.setOnClickListener(this);
    loginButton.setOnClickListener(this);
    return view;
}


@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.register_button:{
            listener.buttonClicked(v);
            break;
        }
        case R.id.reset_button:{
            isPopUpOpen = true;
            resetPopUpWindow();
            break;
        }
        case R.id.fragment_login_loginButton:{
            final ProgressDialog progressDialog = new ProgressDialog(getActivity());
            progressDialog.setMessage("Logging In...");
            progressDialog.show();//FOLLOWING METHOD NOT WORKING...



            Backendless.UserService.login("email", password, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser user) {
                    Toast.makeText(getActivity(), "Logged In!", Toast.LENGTH_LONG).show();
                    SharedPreferences myPrefs = getActivity().getSharedPreferences(PREFS_LOGGED_IN, 0);
                    SharedPreferences.Editor editor = myPrefs.edit();
                    editor.putBoolean("isLoggedIn", true);
                    editor.commit();

                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getActivity(), "No Name", Toast.LENGTH_LONG).show();
                }
            });


        }
        break;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-14 19:37:22

用于login()Backendless方法需要一个String作为第二个参数。你在给它传递一个EditText。您必须从EditText中提取值。将password.getText().toString()作为login()方法的第二个参数。

而且,在实际发送值之前检查EditText中的空值是一种很好的做法。所以一定要做那些检查。

票数 3
EN

Stack Overflow用户

发布于 2016-02-14 19:53:46

由于这个网站提到了登录方法语法如下所示:

代码语言:javascript
运行
复制
public void Backendless.UserService.login( String login, 
                                          String password, 
                                          AsyncCallback<BackendlessUser> callback );

public void Backendless.UserService.login( String login, 
                                          String password, 
                                          boolean stayLoggedIn, 
                                          AsyncCallback<BackendlessUser> callback );

您正在传递一个EditText而不是一个String。因此,将其替换为:

代码语言:javascript
运行
复制
Backendless.UserService.login("email", password, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser user) {
                    Toast.makeText(getActivity(), "Logged In!", Toast.LENGTH_LONG).show();
                    SharedPreferences myPrefs = getActivity().getSharedPreferences(PREFS_LOGGED_IN, 0);
                    SharedPreferences.Editor editor = myPrefs.edit();
                    editor.putBoolean("isLoggedIn", true);
                    editor.commit();

                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getActivity(), "No Name", Toast.LENGTH_LONG).show();
                }
            });

在这方面:

代码语言:javascript
运行
复制
Backendless.UserService.login("email", password.getText().toString(), new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser user) {
                    Toast.makeText(getActivity(), "Logged In!", Toast.LENGTH_LONG).show();
                    SharedPreferences myPrefs = getActivity().getSharedPreferences(PREFS_LOGGED_IN, 0);
                    SharedPreferences.Editor editor = myPrefs.edit();
                    editor.putBoolean("isLoggedIn", true);
                    editor.commit();

                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getActivity(), "No Name", Toast.LENGTH_LONG).show();
                }
            });

希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35397105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档