تازه منظور شما رو فهمیدم ..شما مشکلتون اینه که درسته تایمر صدا زده میشه و مقادیر عوض میشه ولی مقدار textView مقدار null چاپ میکند درسته؟
خب شما به یک نکته توجه نکردید...زمانی که اکتیویتی اجرا میشود..متد oncreate یکبار صدا زده میشود ..توجه کنید یک بار...و وقتی که صدا زده میشود..object تکست ویو ساخته میشود و دستور زیر شما اجرا میشود..
و وقتی اجرا میشود مقدار null رو چاپ میکند....چون هنوز مقدار دهی نشده...ولی وقتی متد تایمر صدا زده میشود مقدار string_from_sp عوض میشود هر چند لحظه ..ولی چون دستور بالا داخل بدنه oncreate ساخته شده..و یکبار فقط صدا زده شده...دیگه صدا زده نمیشود و همان مقدار قبلی نمایش داده میشود...در واقع مقدار متغییر هر لحظه تغییر میکند ولی دستور
یکبار اجرا میشود بخاطر همین شما فکر میکنید مقدار متغییر تغییر نمیکند..درحالی که تغییر میکند ....
امیدوارم متوجه شده باشید...پس تمامی کارایی که میخواید روی متغییر هر چند لحظه انجام بشن داخل یک متد مثلا
بعد این متد رو داخل متد تایمر صدا بزنید...
امیدوارم جوابتون کامل گرفته باشید.
خب شما به یک نکته توجه نکردید...زمانی که اکتیویتی اجرا میشود..متد oncreate یکبار صدا زده میشود ..توجه کنید یک بار...و وقتی که صدا زده میشود..object تکست ویو ساخته میشود و دستور زیر شما اجرا میشود..
کد پیاچپی:
textview.setText(string_from_sp);
و وقتی اجرا میشود مقدار null رو چاپ میکند....چون هنوز مقدار دهی نشده...ولی وقتی متد تایمر صدا زده میشود مقدار string_from_sp عوض میشود هر چند لحظه ..ولی چون دستور بالا داخل بدنه oncreate ساخته شده..و یکبار فقط صدا زده شده...دیگه صدا زده نمیشود و همان مقدار قبلی نمایش داده میشود...در واقع مقدار متغییر هر لحظه تغییر میکند ولی دستور
کد پیاچپی:
textview.setText(string_from_sp);
یکبار اجرا میشود بخاطر همین شما فکر میکنید مقدار متغییر تغییر نمیکند..درحالی که تغییر میکند ....
امیدوارم متوجه شده باشید...پس تمامی کارایی که میخواید روی متغییر هر چند لحظه انجام بشن داخل یک متد مثلا
کد پیاچپی:
public void working_on_string()
{
textview.setText(string_from_sp);
//کارایی که باید انجام بدید.
}
بعد این متد رو داخل متد تایمر صدا بزنید...
امیدوارم جوابتون کامل گرفته باشید.