رفتن به مطلب
  • 0

نحوه استفاده از یک تابع درون اکتیویتی دیگر؟


m3r

سوال

سلام

من یه برنامه نوشتم که از طریق tcp اطلاعات رو دریافت میکنه و نمایش میده

سوالم اینجاست که تابع دریافت درون اکتیویتی main قرار داره و وقتی به اکتویویتی دیگه میرم دیگه اصلا اون تابع کار نمیکنه!

چطور میتونم از یه تابع که درون اکتیویتی main قرار داره درون اکتیویتی دیگه استفاده کنم؟

ممنون:hi:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

16 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

شما بهتره همه ی کارهایی که برای دریافت میکنید رو توی یه سرویس انجام بدین و هرجا خواستین اون سرویس رو استارت و مقادیر رو بگیرین. 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 11 ساعت قبل، محمدرضا شاهپیری گفته است :

شما بهتره همه ی کارهایی که برای دریافت میکنید رو توی یه سرویس انجام بدین و هرجا خواستین اون سرویس رو استارت و مقادیر رو بگیرین. 

ممنون از راهنماییتون:give_rose:

مشکلم حل شد:yahoo:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 16 ساعت قبل، m3r گفته است :

ممنون از راهنماییتون:give_rose:

مشکلم حل شد:yahoo:

سلام

میشه راهنمایی کنید مشکلتون دقیقا چطور حل شد.

تشکر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 10 دقیقه قبل، m3r گفته است :

سلام

من یه برنامه نوشتم که از طریق tcp اطلاعات رو دریافت میکنه و نمایش میده

سوالم اینجاست که تابع دریافت درون اکتیویتی main قرار داره و وقتی به اکتویویتی دیگه میرم دیگه اصلا اون تابع کار نمیکنه!

چطور میتونم از یه تابع که درون اکتیویتی main قرار داره درون اکتیویتی دیگه استفاده کنم؟

ممنون:hi:

سلام ساده ترین اینه که داخل سرویس starter یک متغییر ایجاد کنید و درون اون بریزید و کل برنامه اونو میشه استفاده کرد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 1 دقیقه قبل، amir54 گفته است :

سلام ساده ترین اینه که داخل سرویس starter یک متغییر ایجاد کنید و درون اون بریزید و کل برنامه اونو میشه استفاده کرد

ممنون بابت راهنمایی

من دقیقا متوجه نشدم ولی خودم یه متغیر سراسری در اکتیویتی main تعریف کردم و درون اکتیویتی دیگه استفاده کردم

مشکل اینه که وقتی میرم تو یه اکتیویتی دیگه دیگه اون تابع دریافت که درون اکتیویتی main هست اجرا نمیشه که مقدار متغیر سراسری رو تغییر بده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در هم اکنون، m3r گفته است :

ممنون بابت راهنمایی

من دقیقا متوجه نشدم ولی خودم یه متغیر سراسری در اکتیویتی main تعریف کردم و درون اکتیویتی دیگه استفاده کردم

مشکل اینه که وقتی میرم تو یه اکتیویتی دیگه دیگه اون تابع دریافت که درون اکتیویتی main هست اجرا نمیشه که مقدار متغیر سراسری رو تغییر بده

شاید بعد از اجرای اکتیویتی جدید اکتیویتی قبلی رو میبندید و من برای شما عکس متغییر سراسری سرویس رو عکس گرفتم اینم تست کنید

1.PNG

2.PNG

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 14 دقیقه قبل، amir54 گفته است :

شاید بعد از اجرای اکتیویتی جدید اکتیویتی قبلی رو میبندید و من برای شما عکس متغییر سراسری سرویس رو عکس گرفتم اینم تست کنید

1.PNG

2.PNG

ممنون بابت وقتی که میزارید

این کار رو هم کردم اما باز هم فقط زمانی که تو اکتیویتی main هستم دریافت انجام میشه

در ضمن من activity رو هم نمیبنمدم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 32 دقیقه قبل، m3r گفته است :

ممنون بابت وقتی که میزارید

این کار رو هم کردم اما باز هم فقط زمانی که تو اکتیویتی main هستم دریافت انجام میشه

در ضمن من activity رو هم نمیبنمدم

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوست عزیز توابع مربوط به هر ماژول فقط توی همون ماژول میتونه استفاده بشه و تنها راه استفادش توی ماژولهای دیگه استفاده از دستور callsub هست. که زیاد تو انجمن درموردش بحث شده. از ست کردن متغیر گلوبال و این جور کارا پرهیز کنید. بهترین راه استفاده از اینتنت و فرستادن مقادیر از این طریق هست.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 8 ساعت قبل، محمدرضا شاهپیری گفته است :

دوست عزیز توابع مربوط به هر ماژول فقط توی همون ماژول میتونه استفاده بشه و تنها راه استفادش توی ماژولهای دیگه استفاده از دستور callsub هست. که زیاد تو انجمن درموردش بحث شده. از ست کردن متغیر گلوبال و این جور کارا پرهیز کنید. بهترین راه استفاده از اینتنت و فرستادن مقادیر از این طریق هست.

ممنون بابت راهنمایی

دستور call sub رو استفاده کردم ولی اتفاقی نیفتاد!!

تابع TcpStreams_NewData فقط زمانی فراخوانی میشه که اطلاعات دریافت شه و همینجوری نمیشه فراخوانیش کرد چون یه متغیر ورودی داره که خودش مقدار میگیره

اگه در مورد intent یه توضیح بدین ممنون میشم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1396/09/19, 13:49:19، mehdi29665 گفته است :

سلام

میشه راهنمایی کنید مشکلتون دقیقا چطور حل شد.

تشکر

سلام

شرمنده من یه مدت نبودم

تمام کدها و توابع مربوط به network رو بردم تو service و از اکتویتی main زمانی که میخوام به سرور کانکت بشم سرویس رو اجرا میکنم.تو سرویس هم یه متغیر سراسری تعریف کردم که زمان دریافت سرور مقدارش تغییر میکنه و اینجوری تو تمام اکتیویتیها در دسترس هست

لینک ارسال
به اشتراک گذاری در سایت های دیگر

باسلام

من توابع را داخل یک ماژول کد مینویسم و در هر اکتیویتی که بخوام صدا میزنم مشکلی هم تاحالا پیش نیومده برای کدهام

برای مثال کدهای اتصال و اینیشیالایز به دیتابیس را من در قالب تابع ایجاد میکنم و به راحتی اونارو در هرجا که بخوام فرآخوانی میکنم.

پس یه Code Module بسازید و تابع را داخش ایجاد کنید. بعد در هر اکتیویتی که خواستید با نام Code Module و نام تابع اونا فرآخوانی کنید.

Sub ForseRtlSupported
	Dim j,jo As JavaObject
	jo.InitializeStatic  ("android.view.View")
	If j.InitializeStatic  ("android.os.Build$VERSION").GetField ("SDK_INT") > 16 Then
		j.InitializeContext.RunMethodJO("getWindow",Null).RunMethodJO("getDecorView",Null) _
.RunMethod ("setLayoutDirection",Array(jo.GetField ("LAYOUT_DIRECTION_RTL")))
	End If
End Sub
CodeModule.ForseRtlSupported

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 12 ساعت قبل، mohsen m گفته است :

باسلام

من توابع را داخل یک ماژول کد مینویسم و در هر اکتیویتی که بخوام صدا میزنم مشکلی هم تاحالا پیش نیومده برای کدهام

برای مثال کدهای اتصال و اینیشیالایز به دیتابیس را من در قالب تابع ایجاد میکنم و به راحتی اونارو در هرجا که بخوام فرآخوانی میکنم.

پس یه Code Module بسازید و تابع را داخش ایجاد کنید. بعد در هر اکتیویتی که خواستید با نام Code Module و نام تابع اونا فرآخوانی کنید.


Sub ForseRtlSupported
	Dim j,jo As JavaObject
	jo.InitializeStatic  ("android.view.View")
	If j.InitializeStatic  ("android.os.Build$VERSION").GetField ("SDK_INT") > 16 Then
		j.InitializeContext.RunMethodJO("getWindow",Null).RunMethodJO("getDecorView",Null) _
.RunMethod ("setLayoutDirection",Array(jo.GetField ("LAYOUT_DIRECTION_RTL")))
	End If
End Sub

CodeModule.ForseRtlSupported

 

سلام

این تابعی که من میگم اصلا خودم فراخوانی نمیکنم (و نمیشه خودم فراخوانی کنم چون مقدار ورودی تابع همون داده دریافتی از سمت فرستنده هست) و به صورت اتوماتیک در اکتیویتی main وقتی دیتا دریافت میشه اجرا میشه و الان مشکل اینجاست که وقتی در اکتیویتی دیگه هستم زمان دریافت دیتا این تابع خودش باید اجرا بشه و من نمیتونم خودم اجراش کنم چون ورودی تابع همون داده ارسال شده از سمت فرستنده هست

لینک ارسال
به اشتراک گذاری در سایت های دیگر

عزیز من فکر کنم راه رو اشتباه دارین میرین کلا. وقتی شما توی یه اکتیویتی هستید دیگه به هیچ وجه نمیتونید از متدهای اکتیویتیای دیگه استفاده کنید چون اکتیویتی فقط زمانی قابل دسترسه که توحالت onresum باشه.

کاری که شما میخواین انجام بدین نیاز به کلاس جداگونه داره. شما یه کلاس بنویسید و متدتونو توش بنویسید و هرجایی که میخواین از اون استفاده کنید. به عنوان مثال کلاستون و متدتون به شکل زیر باشه

Sub Class_Globals
	
End Sub

Public Sub Initialize

End Sub
Sub metod1(myfiled As String)
	Log(myfiled)
End Sub

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

Dim myclass1 As myclass
myclass1.Initialize
myclass1.metod1("mystring")

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1396/09/15, 11:39:44، محمدرضا شاهپیری گفته است :

عزیز من فکر کنم راه رو اشتباه دارین میرین کلا. وقتی شما توی یه اکتیویتی هستید دیگه به هیچ وجه نمیتونید از متدهای اکتیویتیای دیگه استفاده کنید چون اکتیویتی فقط زمانی قابل دسترسه که توحالت onresum باشه.

کاری که شما میخواین انجام بدین نیاز به کلاس جداگونه داره. شما یه کلاس بنویسید و متدتونو توش بنویسید و هرجایی که میخواین از اون استفاده کنید. به عنوان مثال کلاستون و متدتون به شکل زیر باشه


Sub Class_Globals
	
End Sub

Public Sub Initialize

End Sub
Sub metod1(myfiled As String)
	Log(myfiled)
End Sub

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


Dim myclass1 As myclass
myclass1.Initialize
myclass1.metod1("mystring")

 

دوست عزیز الان مشکل من اینجاست که اون sub metod1 که شما نوشتید و یه رشته ورودی داره رو من نمیتونم استفاده کنم!

چون رشته ورودی رو من نمیتونم بهش بدم و زمان دریافت اون رشته مقدار میگیره!

Sub WiFi_Socket_Connected (Connected As Boolean)
	
	If Connected = True Then
		ToastMessageShow("Connected",True)
		TcpStreams.Initialize(WiFi_Socket.InputStream,WiFi_Socket.OutputStream,"tcpStreams")	
		Button1.Text = "Connected"
		Button1.TextColor = Colors.Red		
	Else
		ToastMessageShow("Server not Found",True)
		Button1.TextColor = Colors.Black
	End If
		
End Sub

Public Sub TcpStreams_NewData (Buffer() As Byte)
			
	Dim Rx_Stringa As String
	
    Rx_Stringa = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
	bu=bu&Rx_Stringa	
End Sub


Sub Activity_Resume
	ServerSocket1.Initialize(0, "")
	MioIP = ServerSocket1.GetMyIP 
	Label1.Text = MioIP
	Label3.Text = Port
	Label2.Text = ServerIp
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
	WiFi_Socket.Initialize("WiFi_Socket")
	ServerIp = Label2.Text
	Port = Label3.Text
	WiFi_Socket.Connect(ServerIp,Port,5000)
End Sub

اون تابع tcpstreams_newdata منظورم هست

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...