2016-04-13 10 views
0

sharedPreferencesに文字列を保存しようとしています。私は何が間違っているのか分からないが、String値を保存しない。sharedPreferencesの文字列値を保存しない


これはここで私は文字列値「電話」を保存していたコード です。 予告そのフラグメントページここ

package com.world.bolandian.watchme; 

    import android.app.Fragment; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.SharedPreferences; 
    import android.os.Bundle; 
    import android.preference.PreferenceManager; 
    import android.support.annotation.Nullable; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.Toast; 

    import com.google.gson.Gson; 


    public class LoginFragment extends Fragment implements Listen { 
    Button loginBtn; 
    ServerRequest ser; 
    Connector c; 
    LoginCommunicationThread loginT; 
    private LoginUser logUser; 
    EditText phone,password; 

    @Nullable 
    @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_login, container, false); 
} 
    public void setInterface(Connector c){ 
    this.c=c; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    ser=new ServerRequest(); 
    ser.addServerName(Params.SERVER_URL); 
    ser.addServletName(Params.LOGIN_SERVLET); 
    ser.setResponse(this); 
    loginT = new LoginCommunicationThread(ser); 


    phone = (EditText)getActivity().findViewById(R.id.userTxt); 
    password = (EditText)getActivity().findViewById(R.id.passwordTxt); 
    loginBtn = (Button) getActivity().findViewById(R.id.loginBtn); 



    loginBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //save phone number in sharedpreferences 
      SharedPreferences pref = getActivity().getPreferences(0); 
      SharedPreferences.Editor edt = pref.edit(); 
      edt.putString("PHONE",String.valueOf(phone.getText())); 
      edt.commit(); 

      Context context = getActivity(); 
      PreferenceManager.getDefaultSharedPreferences(context).edit().putString("PHONE", String.valueOf(phone.getText())); 
      logUser = new LoginUser(phone.getText().toString(),password.getText().toString()); 
      if (phone.getText().toString() == null) 
      { 
       Toast.makeText(getActivity(),"Please enter phone number", Toast.LENGTH_LONG).show(); 
      } 
      if(password.getText().toString() == null) 
      { 
       Toast.makeText(getActivity(),"Please enter password", Toast.LENGTH_LONG).show(); 
      } 
      else { 
       Gson g = new Gson(); 
       String ans = g.toJson(logUser, LoginUser.class); 
       login(logUser); 
      } 
     } 
    }); 
} 

public void login (LoginUser user) 
{ 
    LoginCommunicationThread con; 
    ServerRequest ser = new ServerRequest(); 
    ser.setResponse(this); 
    Gson gson = new Gson(); 

    String send = gson.toJson(user,LoginUser.class); 

    ser.addParamaters(Params.USER,send); 
    ser.addServerName(Params.SERVER_URL); 
    ser.addServletName(Params.LOGIN_SERVLET); 
    con = new LoginCommunicationThread(ser); 
    con.start(); 
} 

@Override 
public void good() { 
    Toast.makeText(getActivity(), "Welcome", Toast.LENGTH_LONG).show(); 
    Intent i = new Intent(getActivity(),MainActivity.class); 
    startActivity(i); 
} 

@Override 
public void notGood() { 
     Toast.makeText(getActivity(),"Wrong password or phone",Toast.LENGTH_LONG).show(); 
} 

@Override 
public void notGoodServerEroorr() { 
    Toast.makeText(getActivity(), "Connection Error please try again", Toast.LENGTH_LONG); 
} 

} 

iが値 "PHONE" を抽出しかし、私はnullを取得しておきます。何らかの理由でそれが値を取得doesntのデフォルトはnullです

package com.world.bolandian.watchme; 

    import android.app.Activity; 
    import android.content.SharedPreferences; 
    import android.graphics.Color; 
    import android.os.Bundle; 
    import android.preference.PreferenceManager; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.TabHost; 
    import android.widget.TextView; 

    import com.google.gson.Gson; 


    public class MainActivity extends Activity implements Listen { 
    private LockAndUnLock sendnotf; 
    TextView status; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    status = (TextView)findViewById(R.id.status); 
    TabHost tabHost = (TabHost) findViewById(R.id.tabHost); 
    tabHost.setup(); 

    TabHost.TabSpec tabspec = tabHost.newTabSpec("main"); 
    tabspec.setContent(R.id.main); 
    tabspec.setIndicator("Main"); 
    tabHost.addTab(tabspec); 


    tabspec = tabHost.newTabSpec("gps"); 
    tabspec.setContent(R.id.GPS); 
    tabspec.setIndicator("GPS"); 
    tabHost.addTab(tabspec); 


    tabspec = tabHost.newTabSpec("info"); 
    tabspec.setContent(R.id.INFO); 
    tabspec.setIndicator("Info"); 
    tabHost.addTab(tabspec); 

} 

public void Lock (View view) 
{ 
     SharedPreferences sharedPreferences =  
     PreferenceManager.getDefaultSharedPreferences(this); 
     String phone = sharedPreferences.getString("PHONE", null); 
     PreferenceManager.getDefaultSharedPreferences(this).getString("PHONE", 
    null); 

    sendnotf = new LockAndUnLock(phone,1); // 1 = true = lock 
    Gson g = new Gson(); 
    String ans=g.toJson(sendnotf, LockAndUnLock.class); 
    sendLockAndUnlock(sendnotf); 

    if (status.getVisibility() != View.VISIBLE) { 
     status.setVisibility(View.VISIBLE); 
    } 
    status.setText("LOCKED"); 
    status.setTextColor(Color.RED); 
} 


public void UnLock (View view) 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    String phone = sharedPreferences.getString("PHONE",null); 

    sendnotf = new LockAndUnLock(phone,0); // 0 = false = unlock 
    Gson g = new Gson(); 
    String ans=g.toJson(sendnotf, LockAndUnLock.class); 
    sendLockAndUnlock(sendnotf); 

    if (status.getVisibility() != View.VISIBLE) { 
     status.setVisibility(View.VISIBLE); 
    } 
    status.setText("OPEN"); 
    status.setTextColor(Color.GREEN); 
} 


@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); 
} 

@Override 
public void good() { 

} 

@Override 
public void notGood() { 

} 

@Override 
public void notGoodServerEroorr() { 

} 

public void sendLockAndUnlock(LockAndUnLock sendnotf){ 

    RegisterCommunicationThread con; 
    ServerRequest ser = new ServerRequest(); 
    ser.setResponse(this); 
    Gson gson = new Gson(); 

    String send = gson.toJson(sendnotf, LockAndUnLock.class); 

    ser.addParamaters(Params.LOCKANDUNLOCK,send); 
    ser.addServerName(Params.SERVER_URL); 
    ser.addServletName(Params.LOCKANDUNLOCK_SERVLET); 
    con = new RegisterCommunicationThread(ser); 
    con.start(); 
    } 
} 
+1

なぜSharedPreferences pref = getActivity()。getPreferences(0); 'を使用しますか?試しに 'SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(')の代わりに.. – Lal

+0

ヒットするhttp://stackoverflow.com/questions/12074156/android-storing-retrieving-strings-with-shared-preferences – Zombie

+0

断片。私はgetActivity() –

答えて

0

問題は、異なる共有設定オブジェクトである(このページは活動です)。公式ドキュメントによると:

getPreferences(INTモード)

追加APIレベル1でSharedPreferencesがこの活動にプライベートです 好みにアクセスするためのオブジェクトを取得します。これは、この アクティビティのクラス名をプリファレンス名として渡すことによって、基礎となるgetSharedPreferences(String、int)メソッドの を呼び出すだけです。

私の提案は、共有設定を処理するための特別なエンティティを使用することです。あなたのケースでは、その後、上記目的をActivitySharedPreferencesFragmentにすべてのあなたの直接呼び出しを置き換えるコード

public class SharedPreferencesManager { 

    private static final String PREFERENCES_NAME = "your_name";//name for xml file 

    private final SharedPreferences sharedPreferences; 

    public SharedPreferencesManager(Context context) { 
    sharedPreferences = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); 
    } 

    public String getPhone() { 
    return sharedPreferences.getString("PHONE", null); 
    } 

    public void savePhone(@NonNull String phone) { 
    sharedPreferences.edit().putString("PHONE", phone).apply(); //or commit for blocking save 
    } 
} 

を次のようになります。

+0

を使用しますが、私は** SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); **を使用して、値を取得しません。 –

+0

@BolandianEran私は自分の返答を更新しました。あなたのためにもっと明確になることを願っています。 – jakubbialkowski

+0

ありがとう!本当に助けになった! –

関連する問題