انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
گرفتن مقدار یک متغیر از متد‌ی دیگر (در اندروید)

گرفتن مقدار یک متغیر از متد‌ی دیگر (در اندروید)

#1
سلام
من کدی به شکل زیر دارم و باید مقدار متغیر string_from_sp را در هر چند ثانیه بگیرم و در یک textview نمایش دهم.

کد پی‌اچ‌پی:
int delay 500
int period 1000;
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() 
      { 
    
String string_from_sp;
     @
Override
     
public void run() {
     
SharedPreferences shared getSharedPreferences("Prefs"MODE_PRIVATE);
     
SharedPreferences.Editor editor shared.edit();
      
string_from_sp shared.getString("str""");
                         }  }, 
delayperiod); 
textview.setText(string_from_sp); 

اما متغیر string_from_sp تنها در تابع timer شناخته شده است. چگونه می‌توان کاری کرد تا مقدار string_from_sp در خارج نیز  شناخته شده و قابل استفاده باشد؟
پاسخ

گرفتن مقدار یک متغیر از متد‌ی دیگر (در اندروید)

#2
من دقیق متوجه نشدم.. شما خب یک تایمر دارید و که بوسیله sharedPreferences یه رشته رو بر میگردونه و داخل string_from_sb ذخیره میکنه...خب این متد مشکلی که نداره ..اینکه میخواید رشته  بیرون از بدنه قابل دسترسی باشه..کافیه رشته رو بیرون از بدنه تایمر و در کلاس اصلی تعریف کنید..پس کافیه عبارت زیر رو از داخل بدنه پاک کنید و داخل کلاستون تعریف کنید.

کد پی‌اچ‌پی:
String string_from_sp

نمیدونم سوالتون همین بود یا من بد متوجه شدم
پاسخ
 سپاس شده توسط ramtin2080

گرفتن مقدار یک متغیر از متد‌ی دیگر (در اندروید)

#3
هنگامی که رشته را در کلاس اصلی تعریف می‌کنم مقداری متفاوت  (null) نمایش داده می‌شود. اما من می‌خواهم این مقدار از SharedPreferences هر چند ثانیه گرفته شود به صورتی که بشود در خارج از timer روی آن پردازش انجام داد. در واقع مقدار جدید که در هر چند ثانیه بروز می‌شود تنها درون timer قابل استفاده است.
پاسخ

گرفتن مقدار یک متغیر از متد‌ی دیگر (در اندروید)

#4
سلام.
براتون مثال می زنم :

کد پی‌اچ‌پی:
package com.kelidestan.com;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class 
MainActivity extends Activity {

    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);        
        
setContentView(R.layout.activity_main);
        
        
MyClass myClass = new MyClass();
        
String newString myClass.myString;
        
Toast.makeText(getApplicationContext(), newStringToast.LENGTH_SHORT).show();    
    }
    
    public class 
MyClass {
        
String myString "www.kelidestan.com";
    }



کدهای تعریف کلاس به صورت زیر می باشد :

کد پی‌اچ‌پی:
public class MyClass {
    
String myString "www.kelidestan.com";


بعد در کدهای روش onCreate ، کدهای زیر را نوشته ایم :

کد پی‌اچ‌پی:
MyClass myClass = new MyClass();
String newString myClass.myString;
Toast.makeText(getApplicationContext(), newStringToast.LENGTH_SHORT).show(); 

که در آن، با خط زیر، یک شیء (object) از کلاس MyClass ساخته شده :

کد پی‌اچ‌پی:
MyClass myClass = new MyClass(); 

و بعد خط زیر را داریم که در آن، به مقدار myString دسترسی داریم :

کد پی‌اچ‌پی:
String newString myClass.myString

-------------------------------------------------

همچنین دقت داشته باشید که مواردی که با SharedPreferences ذخیره شده اند، با همان روش های فراخوانی SharedPreferences ، در هر بخشی از برنامه اندروید، قابل فراخوانی می باشند. یعنی جدا از مثال بالا، شما می توانید مقدار ذخیره شده با SharedPreferences را در هر جایی فراخوانی کنید (بنابراین مقدار جدید را ذخیره کرده و بعد در هر جایی که خواستید، فراخوانی می کنید).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط داش بهروز ، ramtin2080

گرفتن مقدار یک متغیر از متد‌ی دیگر (در اندروید)

#5
تازه منظور شما رو فهمیدم ..شما مشکلتون اینه که درسته تایمر صدا زده میشه و مقادیر عوض میشه ولی مقدار textView مقدار null چاپ میکند درسته؟
خب شما به یک نکته توجه نکردید...زمانی که اکتیویتی اجرا میشود..متد 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);
//کارایی که باید انجام بدید.



بعد این متد رو داخل متد تایمر صدا بزنید...
امیدوارم جوابتون کامل گرفته باشید.
پاسخ
 سپاس شده توسط ramtin2080 ، admin ، شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان