名前や電子メールなどの文字列を渡すには、カスタムsharedPreferencesクラスを使用するのが簡単です。文字列をフラグメントAからアクティビティBに渡し、またフラグメントBとCの名前にアクセスする場合は、すべてローカルのsharedPreferencesクラスを使用して行うことができます。私はあなたのための例のコードを下記に投稿します。
カスタムSharedPreferencesクラス(それがUserDetailsか何かを呼び出す):
public class UserDetails{
static final String SharedPrefUserName = ""; //default value can go in between " ".
static final String SharedPrefUserOtherData = "";
//the bit below gets the shared preferences
public static SharedPreferences getSharedPreferences(Context ctx)
{
return PreferenceManager.getDefaultSharedPreferences(ctx);
}
//This sets a string value
public static void setLoggedInUserName(Context ctx, String name)
{
SharedPreferences.Editor editor = getSharedPreferences(ctx).edit();
editor.putString(SharedPrefUserName, name);
editor.commit();
}
//this retrieves a string value
public static String getLoggedInUserName(Context ctx)
{
return getSharedPreferences(ctx).getString(SharedPrefUserName, "");
}
}
資格情報を設定するには、あなたが使用します。
username = (EditText) findViewById(R.id.username);
String name = username.getText().toString();
// If you called your shared prefs 'UserDetails', storing the name would look like this:
UserDetails.setLoggedInUserName(getApplicationContext(), name);
その後、格納されたデータを取得するため、及び(TextViewの設定それを 'userNameTextView'と呼ぶことができます)。
Textview usernameTextView = (TextView) findViewById(R.id.yourTextViewId);
String userStoredName = UserDetails.getLoggedInUserName(getActivity());
userNameTextView.setText(userStoredName);
編集:これを行うことができますSharedPreferencesの新しいクラスを作成せずに以下のコードはあなたのものと同じですが、SharedPreferencesを実装して修正しました。
Stringを使用して、共有のprefsに文字列を挿入します。
SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name",name);
editor.apply();
これは、(getText()。toString()を使用して)EditTextで取得した 'name'の値を設定します。今すぐあなたのフラグメントから「名前を」にアクセスするために、あなたがこれを行うことができます:単にコードの最初のビットと同様に、ここで使用されているか、「名前」
SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String name = preferences.getString("Name", "");
注、これは一部である、「キー」と呼ばれています「キーと値のペア」の環境設定に格納されている文字列にアクセスするには、キーが必要です。この方法で、任意の数のKey-Valueペア(名前、年齢、メール、DoB、国など)を保存し、アプリ内のどこにでもアクセスできます。パスワードを共有設定に保存しないように注意してください。
これを理解しやすくするために、投稿したコードを書き換えてコメントを付けて強調表示します。
あなたの主な活動(最初の1):フラグメントのための今
public class Home_Foodcourt extends AppCompatActivity implements View.OnClickListener {
EditText username,userpassword;
Button user_login;
TextView user_register;
FoodCourt_UserLoginDatabase foodCourt_userDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home__foodcourt);
foodCourt_userDatabase=new FoodCourt_UserLoginDatabase(this);
username=(EditText)findViewById(R.id.username);
userpassword= (EditText) findViewById(R.id.loginpassword);
user_login=(Button)findViewById(R.id.login_submit);
user_register= (TextView) findViewById(R.id.user_newregister);
user_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i=new Intent(Home_Foodcourt.this,FoodCourt_Register.class);
startActivity(i);
}
});
user_login.setOnClickListener(this);
}
@Override
public void onClick(View view) {
String name=username.getText().toString();
//############ I've added the section below. ###########
SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name",name);
editor.apply();
//############ SharedPref section complete. ############
String password=userpassword.getText().toString();
String Admin="aDminSN";
String Pass= foodCourt_userDatabase.Login(name);
if(password.equals(Pass)) //
{
Message.message(this,"Log in Successfully");
Intent i=new Intent(Home_Foodcourt.this,Userhome.class);
i.putExtra("Username",name);
startActivity(i);
}else
{
Message.message(this,"Login Failed");
}
}
:
public class HomeFragment extends Fragment {
private TextView textView;
public HomeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Bundle bundle=getArguments();
View rootView=inflater.inflate(R.layout.fragment_home,container,false);
// ####### ALWAYS initialise your view components like below ##
TextView welcomeMessage = (TextView) findViewById(R.id.PUT_TEXTVIEW_ID_HERE);
// ###### The section below fetches the 'name' value from the first activity ###
SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String username = preferences.getString("Name", "DEFAULT_STRING");
/*You can change DEFAULT_STRING to be any string you want. If there
isn't any data to pull from SharedPrefs, it will show this string instead!*/
// ###################
textView.welcomeMessage("Welcome to FoodCourt " + username);
return rootView;
}
}
は、私はこれをテストしていないとブラウザだけでそれを書かれているが、それは非常にです私の現在のプロジェクトで使用しているのと同じように、私はそれがあなたのために働くと確信しています。それがうまくいかない場合はコメントしてください。エラーコードを提供して、私に何かを働かせてください。
あなたはlogcatをクラッシュから投稿できますか? –
どこがクラッシュし、どの例外が起きますか?スタックトレースを送信します。 – Piwo
原因:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void android.widget.TextView.setText(java.lang.CharSequence)'を呼び出そうとしました – satish