简体   繁体   English

android Studio项目上的共享首选项崩溃

[英]Shared Preferences Crushed on android studio project

I have created a project on android studio for register and logging in. I Use Shared Preferences for keeping the user logged in. So when i login the user i use a Toast to make sure of it. 我已经在android studio上创建了一个用于注册和登录的项目。我使用Shared Preferences来保持用户的登录状态。因此,当我登录用户时,我会使用Toast进行确认。 The toast does not apear. 吐司不出现。

SharedPreManager class: SharedPreManager类:

public class SharedPreManager {
private static SharedPreManager mInstance;
private RequestQueue mRequestQueue;
private static Context mCtx;

private static final String SHARED_PREF_NAME="mysharedpref12";
private static final String KEY_USERNAME="name";
private static final String KEY_ID="id";
private static final String KEY_SURNAME="surname";
private static final String KEY_AGE="age";
private static final String KEY_IDENTITY="identity";

private SharedPreManager(Context context) {
    mCtx = context;

}

public static synchronized SharedPreManager getInstance(Context context) {
    if (mInstance == null) {
        mInstance = new SharedPreManager(context);
    }
    return mInstance;
}

public boolean userLogin(int id, String username, String surname, String identity) {
    SharedPreferences sharedPreferences= mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();

    editor.putInt(KEY_ID, id);
    editor.putString(KEY_USERNAME, username);
    editor.putString(KEY_SURNAME, surname);
    editor.putString(KEY_IDENTITY, identity);
    editor.apply();
    return true;
}

Login class: 登录类别:

public class Login extends AppCompatActivity {
EditText UsernameET, PasswordET;
CheckBox identity_doctor, identity_patient;
private ProgressDialog progressDialog;
private int identityId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    if ( SharedPreManager.getInstance(this).isLoggedIn()) {
        finish();
        startActivity(new Intent(this, ProfileActivity.class));
        return;
    }

    UsernameET = (EditText)findViewById(R.id.editText_username);
    PasswordET = (EditText)findViewById(R.id.editText_password);
    identity_doctor = (CheckBox)findViewById(R.id.checkBox_doctor);
    identity_patient = (CheckBox)findViewById(R.id.checkBox_patient);
    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Please wait...");
}

public void OnLogin(View view) {
    final String username = UsernameET.getText().toString().trim();
    final String password = PasswordET.getText().toString().trim();

    //progressDialog.show();
    StringRequest stringRequest = new StringRequest(
            Request.Method.POST,
            Constants.login_url,
            new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {
                    progressDialog.dismiss();
                    try {

                        JSONObject object = new JSONObject(response);

                        if(!object.getBoolean("error")){
                            //that means the user successfully authenticated

                            if(SharedPreManager.getInstance(getApplicationContext()).userLogin(object.getInt("id"),
                                    object.getString("name"),
                                    object.getString("surname"),
                                    object.getString("identity"))){
                                Toast.makeText(
                                        getApplicationContext(),
                                        "TRUE",
                                        Toast.LENGTH_LONG
                                ).show();
                            }
                            SharedPreManager.getInstance(getApplicationContext())
                                    .userLogin(
                                            object.getInt("id"),
                                            object.getString("name"),
                                            object.getString("surname"),
                                            object.getString("identity")
                                    );
                            Toast.makeText(
                                    getApplicationContext(),
                                    "User successfully login",
                                    Toast.LENGTH_LONG
                            ).show();
                        }
                        else {
                            Toast.makeText(
                                    getApplicationContext(),
                                    object.getString("message"),
                                    Toast.LENGTH_LONG
                            ).show();
                        }

                        startActivity(new Intent(getApplicationContext(), ProfileActivity.class));
                        finish();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    progressDialog.dismiss();

                    Toast.makeText(
                            getApplicationContext(),
                            error.getMessage(),
                            Toast.LENGTH_LONG
                    ).show();
                }
            }
    ){
        @Override
        protected Map<String, String> getParams() {
            Map<String,String> params = new HashMap<>();
            params.put("username", username);
            params.put("password", password);
            return params;
        }
    };

    RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
}

The problem seems to happen on userLogin method of SharedPreManager class. 该问题似乎发生在SharedPreManager类的userLogin方法上。 The toast "User successfully login" does not appear. 吐司“用户成功登录”不会出现。 The if statement is true. if语句为true。

I dont know if there is a problem with the database. 我不知道数据库是否有问题。 If needed please comment and i will edit the post with database code. 如果需要,请发表评论,我将使用数据库代码编辑帖子。 Any ideas? 有任何想法吗?

Logcat: 10-05 19:18:46.807 1520-1598/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: org.json.JSONException: No value for name 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at org.json.JSONObject.get(JSONObject.java:389) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at org.json.JSONObject.getString(JSONObject.java:550) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.example.thomas.medicalappointmentorganization.Login$1.onResponse(Login.java:73) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.example.thomas.medicalappointmentorganization.Login$1.onResponse(Login.java:60) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Handler.handleCallback(Handler.java:739) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Looper.loop(Looper.java:135) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5254) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at java.lang.reflect.Method.invoke(Native Method) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Logcat: 10-05 19:18:46.807 1520-1598/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: org.json.JSONException: No value for name 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at org.json.JSONObject.get(JSONObject.java:389) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at org.json.JSONObject.getString(JSONObject.java:550) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.example.thomas.medicalappointmentorganization.Login$1.onResponse(Login.java:73) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.example.thomas.medicalappointmentorganization.Login$1.onResponse(Login.java:60) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Handler.handleCallback(Handler.java:739) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Looper.loop(Looper.java:135) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5254) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at java.lang.reflect.Method.invoke(Native Method) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 10-05 19:18:46.807 1520-1598/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: org.json.JSONException: No value for name 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at org.json.JSONObject.get(JSONObject.java:389) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at org.json.JSONObject.getString(JSONObject.java:550) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.example.thomas.medicalappointmentorganization.Login$1.onResponse(Login.java:73) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.example.thomas.medicalappointmentorganization.Login$1.onResponse(Login.java:60) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Handler.handleCallback(Handler.java:739) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 10-05 19:18:46.819 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.os.Looper.loop(Looper.java:135) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5254) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at java.lang.reflect.Method.invoke(Native Method) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 10-05 19:18:46.820 2523-2523/com.example.thomas.medicalappointmentorganization W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

The error was at the php file. 错误是在php文件。 Json response did not include "name" and "surname" on php file. Json响应在php文件中未包含“名称”和“姓”。

Solved by adding: 通过添加解决:

$response['surname']=$user['surname']

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM