آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ست کردن فیلد ( استرینگ ) در اکتیویتی از کاستوم ترد

Erfan  11 سال پیش  11 سال پیش
0 0

سلام
چطوري ميشه از يک کلاس کاستوم ترد در قسمت HANDLER ( که مثلا txtTest.setText میکنیم )  یک فیلد استرینگ در کلاس اکتیویتی رو که این کاستوم ترد رو صدا میزنه ست کنیم ؟

لطفا راهنمایی کنید . تشکر

 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
sadeghbarout  11 سال پیش
+2 0

دوست عزیز کاش یکم واض تر توضیح میدادی ولی اگه منظورت ست کردن یه string از یه کلاس دیگه به یه textview از درون یه thread و handler ه ، به این شکل میتونی انجام بدی:

 Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                
                G.handler.post(new Runnable() {

                    @Override
                    public void run() {
                        ///////////////////
                        myTextxView.setText(G.myString);
                    }

                });
            }
        });
        thread.start();
پاسخ به سوال 
Erfan  11 سال پیش
+1 0

ببینید یک کاستوم ترد داریم به این صورت

public class CustomThread extends Thread {
    public String   str;
   
    public void setStr(String value) {
        str = value;
    }
   
    @Override
    public void run() {
        super.run();
        G.HANDLER.post(new Runnable() {

            @Override
            public void run() {

                if (getRandomBoolean()) {
//getRandomBoolean yek true false mide ! str = "right"; } else { str = "left"; } } }); } }

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

public class TestActivity extends Activity {

    String str;


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnTest = (Button) findViewById(R.id.btnTest);

        btnTest.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                CustomThread thread = new CustomThread();
                thread.setStr(str);
                thread.start();
                Log.i("LOG", "" + str);
            }
        });
    }
}

این null بر میگردونه در صورتی که باید right یا left بر گردونه .

0 0
خب معلومه، شما Str رو اصلا مقدار دهی نکردی داخل TestActivity (11 سال پیش)
0 0
خوب میخوام از کاستوم ترد ست بشه دیگه ! (11 سال پیش)
0 0
اینجوری که ست نمیشه. اون str که داخل کاستوم ترد گذاشتی فقط هم اسمشه و هییییییییچ ربطی به این str که توی testActivity تعریف کردی نداره. شما یه متد getter داخل CustomThread ت بذار و مقدار str رو از اونجا بگیر (11 سال پیش)
0 0
خوب من هم میدونم هییییییییچ ربطی نداره ولی با اون thread.setStr(str); همونطور که استاد توی ویدیو ها TextView ها رو به کاستوم ترد وصل کردن منم امدم استرینگ هارو وصل کردم ولی در TextView ها ما setTextView میکردیم اما استرینگ رو فقط مساوی کردم (11 سال پیش)
پاسخ به سوال 
sadeghbarout  11 سال پیش
+1 0

این طوری :

 public class CustomThread extends Thread {
    public static String   str;
   
    public void setStr(String value) {
        str = value;
    }
 public String getter() {
        return str;
    }
   
    @Override
    public void run() {
        super.run();
        G.HANDLER.post(new Runnable() {

            @Override
            public void run() {

                if (getRandomBoolean()) {
                    //getRandomBoolean yek true false mide !
                    str = "right";
                } else {
                    str = "left";
                }
            }
        });
    }
}


public class TestActivity extends Activity {

    String str=20;


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnTest = (Button) findViewById(R.id.btnTest);

        btnTest.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                CustomThread thread = new CustomThread();
                thread.setStr(str);
                thread.start();
		str=getter();
                Log.i("LOG", "" + str);
            }
        });
    }

	
}

 ویرایش:

این کد هم  درست کار نمیکنه و دلیلش اینه که شما داری  کدهای تعیین right و left رو توی یه thread اجرا میکنی و مشخصه که thread دوم  موازی با main thread اجرا میشه و زمانی که داره برای شما getter رو اجرا میکنه ، هنوز اون right و left  تعیین نشده ، پس مقدار str اولیه که بهش set کردید رو برمیگردونه و چون اون هم nullه به شما null میده (که من مقدارش رو مثلا 20 گذاشتم ). حالا شما اون setter رو انجام نده میبینی که کلیک اول کار نمیکنه (همون چیزی که spirit  اشاره کرد ) ولی کلیک های بعدی کار میکنه چون متغییرمون استاتیکه

 

 

0 0
این کار هم قبلا کرده بودم بازم هم null بر میگرده :( (11 سال پیش)
0 0
من تست کردم ، کار میکنه ، برای str یه مقدار پیشفرض تو خود کلاس Thread دادم ، فقط یبار نمیدونم چجوری شد مقدار دهی جدید انجام نشد ولی تو کلیک های بعدی درست کار کرد! (11 سال پیش)
0 0
یعنی متد run در HANDLER اجرا شد ؟ و right و left هر بار ریخته شد در str ؟!!!!! (11 سال پیش)
0 0
خب شما داری ترد استفاده میکنی . پاسخ ویرایش شد! (11 سال پیش)
0 0
آقا منم به همین مشکل خوردم ، سوالی که از شما دارم اینه که : با این توضیحات داده شده ، برای اینکه با اولین اجرا بتونم حاصل متغیر استاتیکُ دریافت کنم چیه ؟ (11 سال پیش)
+1 0
اصولیش اینه که باید یه listener تعریف کرد و عمل getter رو توی اون لیسنر انجام داد (11 سال پیش)
0 0
@sadeghhbarout : میشه یه مثال بزنی لطفا به صورت کد باشه ، و اینکه این لیسنر باید کجا تعریف بشه و تو چه قسمتی ، ممنون میشم اگه واسه توضیحات یه نمونه کد یا مثال بزنی (11 سال پیش)
+1 0
متاسفانه الان فرصتشو ندارم کد بذارم. آموزش بخش interface ها رو مطالعه کن یا آموزش ساخت Webservice که جدید استاد ضبط کرده. توی اونا نحوه تعریف و کار با لیسنر گفته شده (11 سال پیش)
پاسخ به سوال 
Hossein Kurd  11 سال پیش
0 0

شما از AsyncTask استفاده کن

و توی اکتیویتی اینجوری تعیین کن

public static String str;

فیلد استرینگ تی ترد رو با نام strTest(صرفا به عنوان مثال) در AsynkTast تعریف کن و در متد onPostExecute در کلاس AsyncTask این رو بده

TestActivity.str = strText;

اگر هم می خوایی به تکستویو مقدار بدی توی اکتیویتی یک متد استاتیک ایجاد کن که به تکست ویو مقدار بده و توی onPostExecute صداش بزن

به این شکل:

     public static void testing(String inputString){
        txt1.setText(inputString);
    }
0 0
اگر مشکلت حل شد بگو (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .