کلیدستان

نسخه‌ی کامل: ذخیره و بازیابی string در savedInstanceState (برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
چرا وقتی از  " savedInstanceState"  استفاده میکنم
 مشکل زیر پیش میاد ؟
وقتی برنامه برای اولین بار اجرا میشه پیغام درسته ..
وقتی گالری ویدئو را فراخوانی میکنم .. در "savedInstanceState"
مقدار "test" را ذخیره میکنم ولی وقتی بازیابی میشه شرط مساوی "test"
اجرا نمیشه ؟؟ و دستورات توی
"else if (savedInstanceState.getString("key")!="test")"
اجرا میشه در حالی که مقدار
 "savedInstanceState.getString("key")"
برابر "test" ؟؟؟؟


کد برنامه 

کد:
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

   if (savedInstanceState != null) {
   
    if (savedInstanceState.getString("key")=="test"){

    TextView txtarr_1=(TextView) findViewById(R.id.test_array_1);
    txtarr_1.setText("if(savedInstanceState.getString(key)==test){" + savedInstanceState.getString("key")+"}");

    }
    else if (savedInstanceState.getString("key")!="test") {
    TextView txtarr_3=(TextView) findViewById(R.id.test_array_3);
    txtarr_3.setText( savedInstanceState.getString("key"));

    }    
   
   }else{
TextView txtarr_5=(TextView) findViewById(R.id.test_array_5);
txtarr_5.setText("elseif (savedInstanceState != null)");
   }}

کد:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putString("key", "test");
 
    super.onSaveInstanceState(savedInstanceState);
}
(۱۳۹۵/۱۲/۱۴, ۰۱:۴۹ ق.ظ)moiid63 نوشته: [ -> ]کد را به شکل زیر تغییر دادم تا به جای اینکه یک string ذخیره کنم بعد بازیابی .... یک عدد ذخیره کنم بعد بازیابی  .. 




کد برنامه 

کد:
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

   if (savedInstanceState != null) {
   
   int val=savedInstanceState.getInt("key");

           if (val==123){

    TextView txtarr_1=(TextView) findViewById(R.id.test_array_1);

txtarr_1.setText("if == 123{" + savedInstanceState.getInt("key")+"}");


    }
    else if (val!=123) {
    TextView txtarr_3=(TextView) findViewById(R.id.test_array_3);
txtarr_3.setText( savedInstanceState.getString("key"));
    }    
   
   }else{
TextView txtarr_5=(TextView) findViewById(R.id.test_array_5);
txtarr_5.setText("elseif (savedInstanceState != null)");
   }}

کد:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("key", putInt);
 
    super.onSaveInstanceState(savedInstanceState);
}

در این حالت مشکل حل میشه یعنی تشخیص میده که 123 ذخیره کردم ولی اگر 123 به شکل متن ذخیره کنم زمان بازیابی تو برنامه دستورات داخل شرط عدم مساوی  123 اجرا میشه  !!!!!!!

یعنی چی ؟؟؟
یعنی متن زمان ذخیره شدن در هنگام فراخوانی  یک اکتیویتی جدید به یک شکل ذخیره میشه و زمان بازیابی با مفداری که ذخیره شده متفاوته ؟؟ 
ولی وقتی نمایشش میدم دقیقا همون متنه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟چرا؟
سلام.
شیوه چک کردن مقدار String ، صحیح نمی باشد :

کد پی‌اچ‌پی:
if (savedInstanceState.getString("key")=="test"){ 


در این زمینه، کلید زیر را بخوانید :

کلید شماره 282

به عنوان یک مثال، برای مساوی بودن، کد زیر :

کد پی‌اچ‌پی:
if(myString.equals("string_to_check")){
 
   // some commands



و برای نامساوی بودن، کد زیر را می نویسیم :

کد پی‌اچ‌پی:
if(!myString.equals("string_to_check")){
 
   // some commands



Flower
سلام وقت بخیر .
ممنون از راهنمایی ..
حل شد ..