0

我使用 backendless.com 作为我的应用程序的后端。我需要在片段中登录我的用户。我不断收到一个语法错误,指出 backendless.com 提供的异步登录方法无法识别。它在 Activity 中运行良好。有谁知道如何让它在片段中工作?这是错误的屏幕截图: 在此处输入图像描述

这是我的片段的代码:

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;
    }
4

2 回答 2

3

login()方法Backendless期望 aString作为第二个参数。你传递给它一个EditText. 您必须从EditText. 做为方法password.getText().toString()的第二个参数。login()

而且,在实际发送值之前检查 EditText 中的空值是一个好习惯。因此,请务必进行这些检查。

于 2016-02-14T19:37:22.797 回答
1

正如这个网站提到的登录方法语法是这样的:

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是 a 而不是 a String。所以替换这个:

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();
                }
            });

有了这个:

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();
                }
            });

希望能帮助到你!!!

于 2016-02-14T19:53:46.363 回答