Как да предам споделени предпочитания от една дейност към друга дейност?

Имам две дейности в моя проект, едната дейност е MainActivity, а другата е Main2activity. В Main2activity приемам информация от потребителя и я съхранявам в SharedPreference. Сега искам да предам тези данни на MainActivity и да покажа тези данни на потребителя.

Кодът за Main2activity е

 package com.example.to_doapp;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import java.io.Serializable;
import java.util.ArrayList;
public class Main2Activity extends AppCompatActivity {




public void BackMain ( View view )
{
    Intent intent = new Intent( getApplicationContext() ,MainActivity.class ) ;
    SharedPreferences sharedPreferences = this.getSharedPreferences( "com.example.to_doapp;", Context.MODE_PRIVATE);
    EditText editText = ( EditText) findViewById( R.id.editText3) ;
    String s = editText.getText().toString();
    sharedPreferences.edit().putString("task" , s ) .apply();

    //intent.putStringArrayListExtra("key",arr);
    startActivity(intent);



}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
}

}

code foe Mainactivity е

package com.example.to_doapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.io.Serializable;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {


public void onclick (View view){

    Intent intent = new Intent(getApplicationContext(), Main2Activity.class );
    startActivity(intent);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    Intent intent = getIntent();


 }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

Искам да знам как да предам sharedpreferences и как да покажа тези данни на потребителя в списък. Благодаря ви за помощта предварително.


person shalini negi    schedule 22.03.2019    source източник
comment
Няма нужда да предавате SharedPreference от един екран на друг, защото можете да получите достъп до обект SharedPreference от всяко място в приложението чрез клавиши.   -  person Rutvik Bhatt    schedule 22.03.2019
comment
@RutvikBhatt, моля, разяснете !! Тъй като съм новак, не мога да разбера.   -  person shalini negi    schedule 22.03.2019
comment
Възможен дубликат на пример за споделени предпочитания за Android   -  person Swati    schedule 22.03.2019
comment
@swati не мога да разбера!!   -  person shalini negi    schedule 22.03.2019


Отговори (6)


Можете да използвате метода SharedPreferences getString() във втората си дейност. Ето документацията: https://developer.android.com/reference/android/content/SharedPreferences.html#getString(java.lang.String,%20java.lang.String)

person just    schedule 22.03.2019

SharedPreferences sharedPreferences = this.getSharedPreferences( "com.example.to_doapp;", Context.MODE_PRIVATE);
sharedPreferences.getString("task", "");

Можете да използвате горния код, за да получите данните от споделените предпочитания по всяко време, докато не бъдат изчистени. Но бих ви предложил да създадете клас за същото и да изпълните всички задачи, свързани с предпочитанията, в същото

person Shahnawaz Ansari    schedule 22.03.2019
comment
Shahnavaz, искаш да кажеш, че добавям този код към моята MainActivity, за да получа достъп до данните, съхранявани в sharedpreferences. След това как да покажа тези данни на потребителя !! - person shalini negi; 22.03.2019
comment
Да и зависи от това как искате да го покажете. Можете да използвате Toast.makeText(this,Това са вашите данни + задача,Toast.LENGTH_SHORT).show(); или можете да използвате TextView, за да го покажете връзка - person Shahnawaz Ansari; 22.03.2019

Най-простият начин е:

Задайте SharedPref:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
Editor editor = prefs.edit();
editor.putString(PREF_NAME, "someValue");
editor.commit();

Вземете SharedPref:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
String yourValue = prefs.getString(PREF_NAME, "");
person Kristiyan Varbanov    schedule 22.03.2019
comment
какво ще стане, ако нашите споделени предпочитания съдържат повече от една информация, тогава какъв ще бъде низът във yourValue? По принцип искам да знам как работи prefs.getString(PREF_NAME, ). - person shalini negi; 22.03.2019

Няма нужда да предавате SharedPreferences. получавате някаква активност или фрагмент върху стойността на SharedPreferences..

SharedPreferences shared = getSharedPreferences("Your SharedPreferences name", MODE_PRIVATE);
String data= shared.getString("key", "");

Забележка: ключът трябва да е същият като използваното време за редактиране или запазване на данни. Същото име на SharedPreferences.

person Infusion Analysts    schedule 22.03.2019
comment
Как да покажа съхранените в него данни на потребителя, моля, посочете !! - person shalini negi; 22.03.2019
comment
можете да покажете всяка контрола за изглед. - person Infusion Analysts; 22.03.2019

Когато добавите споделено предпочитание за приложението, то може да бъде достъпно от всяко място в приложението.

SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(getContext());
String data= shared.getString("nameOfValue", "");
person Gourav    schedule 22.03.2019

Споделям ви най-лесния начин за настройка и получаване на sharedpreference данни:

Първо направете клас за Shared Preference като този:

public class MySharedPreferences {

private static String MY_PREFS = "MyPrefs";
private static String IS_LOGGED_IN = "is_logged_in";
private static String USERNAME_ID = "username"

public static MySharedPreferences instance;
private Context context;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;


public static MySharedPreferences getInstance(Context context) {
    if (instance == null)
        instance = new MySharedPreferences(context);
    return instance;
}

private MySharedPreferences(Context context) {
    this.context = context;
    sharedPreferences = context.getSharedPreferences(MY_PREFS, Context.MODE_PRIVATE);
    editor = sharedPreferences.edit();
}

public void deleteAllSharePrefs(Context context){
    this.context = context;
    sharedPreferences = context.getSharedPreferences(MY_PREFS,Context.MODE_PRIVATE);
    editor.clear().commit();
}

public Boolean getIsLoggedIn(boolean b) {
    return sharedPreferences.getBoolean(IS_LOGGED_IN, false);
}

public void setIsLoggedIn(Boolean isLoggedIn) {
    editor.putBoolean(IS_LOGGED_IN, isLoggedIn);
    editor.commit();
}


public String getUsername() {
    return sharedPreferences.getString(USERNAME_ID, "");
}

public void setUsername(String username) {
    editor.putString(USERNAME_ID, username);
    editor.commit();
}

тогава къде искате да зададете SharedPreference:

public void BackMain ( View view ){
EditText editText = ( EditText) findViewById( R.id.editText3) ;
MySharedPreferences.getInstance(Main2Activity.this).setUsername(editText.getText().toString());
Intent intent = new Intent( getApplicationContext() ,MainActivity.class ) 
startActivity(intent);
}

Сега вземете SharedPreference във вашата втора дейност:

MySharedPreferences.getInstance(ACTIVITYNAME.this).getUsername();

или във фрагмент:

MySharedPreferences.getInstance(getActivity()).getUsername();

или в адаптер:

MySharedPreferences.getInstance(context).getUsername();
person Abhinav Gupta    schedule 22.03.2019
comment
къде да добавя този клас sharedpreferences и как да го покажа на потребителя? - person shalini negi; 22.03.2019
comment
@shalininegi Мисля, че сте нов в Android, моля, направете този клас в основния си пакет - person Abhinav Gupta; 22.03.2019