Search code examples
javaandroidandroid-activitysharedpreferences

My sharedprefrences not sharing correctly


I have an app where you upload images to my company server So The user enters their login details, Email, Password and clientID(4 digit code)(in LoginActivity.java) and then this information must be passed to all the other activities, this passed information is then used to build a URL. Now the issue I am having is the Sharedprefrences doesn't share correctly...they either come up as NULL on the url or as just "email" or "password" The Information is saved correctly in login activity but when i try to pass it to other activities it fails

Login activity here I save the prefrences

public class LoginActivity extends AppCompatActivity implements TextWatcher {


    SharedPreferences MyPrefs;
    Intent intent;
    SharedPreferences.Editor editor;
    public static final String PREF_NAME= "MYPREFS";
    public static final  String ID = "ClientID" ;
    public static final  String EMAIL = "username" ;
    public static final  String PASS = "password";

    EditText email, password, id;

    @SuppressLint("CommitPrefEdits")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        Button buttonOne=findViewById(R.id.button);
        buttonOne.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {



                Intent activity2Intent=new Intent(getApplicationContext(), MainActivity.class);
                startActivity(activity2Intent);

    }
});

        MyPrefs= getSharedPreferences(PREF_NAME, 0);
        editor = MyPrefs.edit();


        email=findViewById(R.id.emailtext);
        password=findViewById(R.id.pwdtext);
        id=findViewById(R.id.clientid);

        email.setText(MyPrefs.getString(EMAIL,"username"));
        password.setText(MyPrefs.getString(PASS,"password"));
        id.setText(MyPrefs.getString(ID, "id"));
        email.addTextChangedListener(this);
        password.addTextChangedListener(this);
        id.addTextChangedListener(this);

        MyPrefs =getSharedPreferences(EMAIL,0);
        MyPrefs =getSharedPreferences(ID,0);
        MyPrefs =getSharedPreferences(PASS,0);
        intent = new Intent(LoginActivity.this,CameraActivity.class);


    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        managePrefs();
    }

    @Override
    public void afterTextChanged(Editable editable) {
managePrefs();

    }


    private void managePrefs(){
        SharedPreferences.Editor editor =MyPrefs.edit();

        editor.putString(EMAIL, email.getText().toString().trim());
        editor.putString(PASS, password.getText().toString().trim());
        editor.putString(ID, id.getText().toString().trim());

        editor.apply();

    }

    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {

    }
}

Camera Activity this is where the shared prefrences must be passed to

public class CameraActivity extends AppCompatActivity implements View.OnClickListener {

    private final int PICK_IMAGE=12345;
    private final int REQUEST_CAMERA=6352;
    private static final int REQUEST_CAMERA_ACCESS_PERMISSION=5674;
    private Bitmap bitmap;

    String myURL;
    String email;
    String clientId;
    String pwd;




    private ImageView imageView;



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

My code for calling sharedprefrences

SharedPreferences sharedPreferences = getSharedPreferences(LoginActivity.PREF_NAME, 0);
         email = sharedPreferences.getString(LoginActivity.EMAIL, "username");
    clientId = sharedPreferences.getString(LoginActivity.ID, "id");
       pwd = sharedPreferences.getString(LoginActivity.PASS, "password");


        imageView=findViewById(R.id.imageView);
        Button fromCamera=findViewById(R.id.fromCamera);
        Button fromGallery=findViewById(R.id.fromGallery);
        Button upload=findViewById(R.id.upload);
        upload.setOnClickListener(this);
        fromCamera.setOnClickListener(this);
        fromGallery.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {



        switch (view.getId()) {
            case R.id.fromCamera:
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                        && ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(new String[]{Manifest.permission.CAMERA},
                            REQUEST_CAMERA_ACCESS_PERMISSION);
                } else {
                    getImageFromCamera();
                }
                break;
            case R.id.fromGallery:
                getImageFromGallery();
                break;
            case R.id.upload:
                if (bitmap != null)
                    uploadImageToServer();
                break;

        }


    }


    private void uploadImageToServer() {
        @SuppressLint("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HH_mm_ss");
        String currentTimeStamp = dateFormat.format(new Date());
        final ProgressDialog pd=new ProgressDialog(CameraActivity.this);
        pd.setMessage("Uploading, Please Wait....");
        pd.show();
        Intent intent = getIntent();
        String Item= intent.getStringExtra("Spinner");
        String Item2= intent.getStringExtra("Spinner2");


        Uri.Builder builder=new Uri.Builder();
        builder.scheme("https")
                .authority("www.smartpractice.co.za")
                .appendPath("files-upload-ruben.asp")
                .appendQueryParameter("MyForm", "Yes")
                .appendQueryParameter("ClientID",clientId)
                .appendQueryParameter("Username", email)
                .appendQueryParameter("Pwd", pwd)
        .appendQueryParameter("category",Item )
        .appendQueryParameter("client",Item2 );
        myURL=builder.build().toString();
        Toast toast = Toast.makeText(CameraActivity.this, myURL , Toast.LENGTH_LONG);
        toast.show();

        File imageFile=persistImage(bitmap,currentTimeStamp);

        Ion.with(this)
                .load(myURL)
                .uploadProgressDialog(pd)
                .setMultipartFile("SP-LOG", "image/jpeg", imageFile)


                .asString()


                .setCallback(new FutureCallback<String>() {
                    @Override
                    public void onCompleted(Exception e, String result) {
                     pd.cancel();
                        Toast.makeText(getApplicationContext(),"Uploaded",Toast.LENGTH_SHORT).show();

                    }
                });

    }

    private File persistImage(Bitmap bitmap, String name) {
        File filesDir=getApplicationContext().getFilesDir();
        File imageFile=new File(filesDir, name + ".jpg");

        OutputStream os;
        try {
            os=new FileOutputStream(imageFile);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
            os.flush();
            os.close();
        } catch (Exception e) {
            Log.e(getClass().getSimpleName(), "Error writing bitmap", e);
        }

        return imageFile;
    }


    private void getImageFromCamera() {
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, REQUEST_CAMERA);
    }

    private void getImageFromGallery() {
        Intent intent=new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
        }
    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_IMAGE) {
            if (resultCode == Activity.RESULT_OK) {
                try {
                    InputStream inputStream=getContentResolver().openInputStream(data.getData());
                    bitmap=BitmapFactory.decodeStream(inputStream);
                    imageView.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

            }
        } else if (requestCode == REQUEST_CAMERA) {
            if (resultCode == Activity.RESULT_OK) {
                Bundle extras=data.getExtras();
                bitmap=(Bitmap) extras.get("data");
                imageView.setImageBitmap(bitmap);
            }
        }
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CAMERA_ACCESS_PERMISSION) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                getImageFromCamera();
            }
        } else {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        }
    }
}

Solution

  • To store data in shared preference do something like this:

    private SharedPreferences.Editor editor = getSharedPreferences(PREF_NAME, MODE_PRIVATE).edit();
                        editor.putString("email", email);
                        editor.putString("ID", id);
                        editor.putString("Pass", password);
                        editor.apply();
    

    so I'll give you bit of explanation, when you write editor.putString("email", email); it tells editor to put your email against key "email".

    Now, if you want to read these values back do it like this:

    String email = getSharedPreferences(PREF_NAME, MODE_PRIVATE).getString("email", "");
    String ID= getSharedPreferences(PREF_NAME, MODE_PRIVATE).getString("ID", "");
    String password= getSharedPreferences(PREF_NAME, MODE_PRIVATE).getString("Pass", "");
    

    Leme know if you don't understand anything.