[英]Android SharedPreferences from Fragment to Activity
I have a LoginFragment()
class and ProfileFragment()
class which is implemented in NavigationDrawerActivity
. 我有一个LoginFragment()
类和ProfileFragment()
这是在实现类NavigationDrawerActivity
。
After logging in in LoginFragment()
, NavigationDrawerActivity
is started. 登录LoginFragment()
,将启动NavigationDrawerActivity
。 When I press Settings in Navigation Drawer Activity there is ProfileFragment
, where I can change a password of user or logout. 当我在“导航抽屉活动”中按“设置”时,会出现ProfileFragment
,在这里可以更改用户密码或注销密码。
I have a problem with downloading user data in ProfileFragment
from LoginFragment
. 我有在下载用户数据的问题ProfileFragment
从LoginFragment
。
There is SharedPreferences
editor, but it does not include my USER settings. 有SharedPreferences
编辑器,但是它不包括我的USER设置。
My code of logging process in LoginFragment(): 我在LoginFragment()中记录过程的代码:
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.AppCompatButton;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class LoginFragment extends Fragment implements View.OnClickListener {
private AppCompatButton btn_login;
private EditText et_email,et_password;
private TextView tv_register;
private ProgressBar progress;
private SharedPreferences pref;
private SharedPreferences.Editor editor;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_login,container,false);
initViews(view);
return view;
}
private void initViews(View view){
pref = getActivity().getPreferences(0);
btn_login = (AppCompatButton)view.findViewById(R.id.btn_login);
tv_register = (TextView)view.findViewById(R.id.tv_register);
et_email = (EditText)view.findViewById(R.id.et_email);
et_password = (EditText)view.findViewById(R.id.et_password);
progress = (ProgressBar)view.findViewById(R.id.progress);
btn_login.setOnClickListener(this);
tv_register.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_register:
goToRegister();
break;
case R.id.btn_login:
String email = et_email.getText().toString();
String password = et_password.getText().toString();
if(!email.isEmpty() && !password.isEmpty()) {
progress.setVisibility(View.VISIBLE);
loginProcess(email, password);
} else {
Snackbar.make(getView(), "Uzupełnij pola!", Snackbar.LENGTH_LONG).show();
}
break;
}
}
private void loginProcess(String email,String password){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
User user = new User();
user.setEmail(email);
user.setPassword(password);
ServerRequest request = new ServerRequest();
request.setOperation(Constants.LOGIN_OPERATION);
request.setUser(user);
Call<ServerResponse> response = requestInterface.operation(request);
response.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();
if(resp.getResult().equals(Constants.SUCCESS)){
editor = pref.edit();
editor.putBoolean(Constants.IS_LOGGED_IN,true);
editor.putString(Constants.EMAIL,resp.getUser().getEmail());
editor.putString(Constants.NAME,resp.getUser().getName());
editor.putString(Constants.UNIQUE_ID,resp.getUser().getUnique_id());
editor.apply();
goToProfile();
}
progress.setVisibility(View.INVISIBLE);
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
progress.setVisibility(View.INVISIBLE);
Log.d(Constants.TAG,"failed");
Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();
}
});
}
private void goToRegister(){
Fragment register = new RegisterFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_frame,register);
ft.commit();
}
private void goToProfile(){
// Fragment profile = new ProfileFragment();
// FragmentTransaction ft = getFragmentManager().beginTransaction();
// ft.replace(R.id.fragment_frame,profile);
// ft.commit();
startActivity(new Intent(getActivity(), MainActivity.class));
}
}
Some of ProfileFragment() classes: 一些ProfileFragment()类:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
pref = LoginFragment().pref;
//pref = getActivity().getPreferences(0);
SharedPreferences.Editor editor = LoginFragment().editor;
tv_name.setText("Welcome : "+pref.getString(Constants.NAME,""));
tv_email.setText(pref.getString(Constants.EMAIL,""));
}
And: 和:
private void logout() {
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean(Constants.IS_LOGGED_IN,false);
editor.putString(Constants.EMAIL,"");
editor.putString(Constants.NAME,"");
editor.putString(Constants.UNIQUE_ID,"");
editor.apply();
startActivity(new Intent(getContext(), LoginActivity.class));
}
How to solve it integrate one SharedPreferences
with another? 如何解决将一个SharedPreferences
与另一个SharedPreferences
集成在一起的问题? Thanks in advance! 提前致谢!
Edit:// I start a ProfileFragment() class from MainActivity() (its navigation drawer) by : 编辑://我通过以下方式从MainActivity()(其导航抽屉)启动一个ProfileFragment()类:
ProfileFragment galleryFragment = new ProfileFragment();
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.enter,R.anim.exit,R.anim.pop_enter, R.anim.pop_exit)
.replace(R.id.content_frame, galleryFragment)
.addToBackStack(null)
.commit();
Instead of getActivity().getPreferences(0);
代替getActivity().getPreferences(0);
use PreferenceManager.getDefaultSharedPreferences(this);
使用PreferenceManager.getDefaultSharedPreferences(this);
in your activity or PreferenceManager.getDefaultSharedPreferences(getContext());
在您的活动或PreferenceManager.getDefaultSharedPreferences(getContext());
in your fragment 在你的片段
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.