رفتن به مطلب

سوال

سلام.

من با استفاده از تابع زیر، میخواهم نام و شماره ساخته شده رو توی مخاطبین گوشی ذخیره کنم:

Public Sub InsertContact(Name As String, Phone As String) As cuContact
	Dim values As ContentValues
	values.Initialize
	values.PutNull("account_name")
	values.PutNull("account_type")
	Dim rawUri As Uri = cr.Insert(rawContactUri, values)
	Dim rawContactId As Long = rawUri.ParseId
	
	values.Initialize
	values.PutLong("raw_contact_id", rawContactId)
	values.PutString("mimetype", "vnd.android.cursor.item/phone_v2")
	values.PutString("data1", Phone)
	cr.Insert(dataUri, values)
	
	values.Initialize
	values.PutLong("raw_contact_id", rawContactId)
	values.PutString("mimetype", "vnd.android.cursor.item/name")
	values.PutString("data1", Name)
	cr.Insert(dataUri, values)
	Dim cu As cuContact
	cu.Initialize
	Dim crsr As Cursor = cr.Query(dataUri, Array As String("contact_id", "display_name"), "raw_contact_id = ?", _
		Array As String(rawContactId), "")
	crsr.Position = 0
	cu.DisplayName = crsr.GetString("display_name")
	cu.Id = crsr.GetLong("contact_id")
	Return cu
End Sub

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

Private a,b,c,d,e,f,g As String
Private number  As String
Private name  As String

For i=1 To 50
			a=Rnd(0,9)
			b=Rnd(0,9)
			c=Rnd(0,9)
			d=Rnd(0,9)
			e=Rnd(0,9)
			f=Rnd(0,9)
			g=Rnd(0,9)

number="0912"&a&b&c&d&e&f&g
name="مخاطب" & i
lst.add(name,number)
Next

که در بخش بالا، 50 تا شماره با پیش شماره 0912 ساخته میشه.

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

InsertContact ( ? , ? )

حالا من موندم که چه طوری شماره ها رو دونه دونه که توی متغیر number هست رو با استفاده از دستور بالا، در مخاطبین ذخیره کنم.

اگه به تابع InsertContact ورودی هاش رو بدم ذخیره میکنه ها، اما من میخوام 50 تا مخاطب تولید شده رو برام ذخیره کنه
ممنون میشم راهنماییم کنید.

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

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

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

  • 1

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

با استفاده از ایندکس به آبجکتش دسترسی دارید

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

  • 1
۱۳ ساعت قبل، MR.B۴A گفته است:

سلام استاد

میشه خواهش کنم زحمت بکشید، اینی که گفتید رو بنویسد 😊

یه کلاس بسازید مثلا به نام MyContact به شکل زیر

Sub Class_Globals
	Public name , number As String
End Sub

Public Sub Initialize
	
End Sub

متد ساخت شماره ها ه مبه شکل زیر میشه

Public Sub generateNumbers
	For i=1 To 50
		Private a,b,c,d,e,f,g As String
		Private number  As String
		Private name  As String
		a=Rnd(0,9)
		b=Rnd(0,9)
		c=Rnd(0,9)
		d=Rnd(0,9)
		e=Rnd(0,9)
		f=Rnd(0,9)
		g=Rnd(0,9)
		number="0912"&a&b&c&d&e&f&g
		name="مخاطب" & i
		Dim cs As MyContact
		cs.Initialize
		cs.name=name
		cs.number=number
		lst.add(cs)
	Next
End Sub

 

وقتی هم روی لیست کلیک شد ایندکس رو به متد زیر پاس بدید

Private Sub addContact(index As Int)
	Dim cs As MyContact =lst.Get(index)
	InsertContact ( cs.name , cs.number )
End Sub

 

5 ساعت قبل، MR.B4A گفته است:

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

درسته استاد؟

مثلا توی 700 تا شماره رو بخوای توی مخاطبین ذخیره کنی

من نمیدونم هدف و بیزینس کارتون چیه. چیکا میخواین بکنید دقیقا؟

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

  • 1
در ۱۴۰۳/۶/۲۶ در ۲۳:۳۸، MR.B۴A گفته است:

استاد خیلی زحمت کشیدید. تشکر

 

هدف من ساختن برنامه ای هست که شماره موبایل به صورت رندم تولید میکنه و توی مخاطبین ذخیره میکنه
همه چی اوکیه، به جز ذخیره در مخاطبین که وقتی تعداد شماره ها میشه چندصدتا، برنامه کرش میکنه

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

بعد با فراخوانی و مقداردهی این تابع، شروع به ثبت شماره تلفن های ساخته شده در کانتکت گوشی میکنه:

cu.InsertContact(name,number))

cu اسم ماژولمه که تعریفش کردم

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

اما توی تعداد کم اوکیه

این مشکلو میخواستم حل کنم

چون کار سنگین انجام میدین تو نخ اصلی ui فریز میشه باید از ترد استفاده کنید. کتابخونه زیر رو استفاده کنید و توی متد doInBackground کار اینزرت رو انجام بدین

 

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

  • 1
۲۲ ساعت قبل، MR.B۴A گفته است:

استاد ببخشید اگه بخوایم این دستورات رو ببریم داخل این کتابخونه PersianAsyncTask، چه طوری باید بازنویسی بشه؟!
آموزشو سورس کدو همه رو دیدم، اما نتونستم بازنویسیش کنم

ممنون میشم کمکم کنید

درود. من متاسفانه اصلا وقت نمیکنم که کد بنویسم برای دوستان

اما به شکل زیره کلیتش

Dim contactTask As PersianAsyncTask


Private Sub startInsert
	contactTask.Initialize("task")
	contactTask.Execute(Null)
End Sub

Private Sub task_DoInBackground(Params() As Object) As Object
	Dim totalSize As Int=lst.Size
	For i=0 To totalSize-1
		Dim contact As MyContact=lst.Get(i)
		InsertContact (contact.name , contact.number)
		contactTask.PublishProgress(i+1)
	Next
End Sub

Private Sub task_PostExecute(Result As Object)
	ToastMessageShow("inset contacts done",False)
End Sub
Private Sub task_ProgressUpdate(Progress() As Object)
	Dim totalSize As Int=lst.Size
	Dim current As Int=Progress(0)
	Log(current& " from "&totalSize&" inserted ")
End Sub

 

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

  • 0
۲۴ دقیقه قبل، محمدرضا شاهپیری گفته است:

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

با استفاده از ایندکس به آبجکتش دسترسی دارید

سلام استاد

میشه خواهش کنم زحمت بکشید، اینی که گفتید رو بنویسد 😊

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

  • 0

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

درسته استاد؟

مثلا توی 700 تا شماره رو بخوای توی مخاطبین ذخیره کنی

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

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

یه کلاس بسازید مثلا به نام MyContact به شکل زیر

Sub Class_Globals
	Public name , number As String
End Sub

Public Sub Initialize
	
End Sub

متد ساخت شماره ها ه مبه شکل زیر میشه

Public Sub generateNumbers
	For i=1 To 50
		Private a,b,c,d,e,f,g As String
		Private number  As String
		Private name  As String
		a=Rnd(0,9)
		b=Rnd(0,9)
		c=Rnd(0,9)
		d=Rnd(0,9)
		e=Rnd(0,9)
		f=Rnd(0,9)
		g=Rnd(0,9)
		number="0912"&a&b&c&d&e&f&g
		name="مخاطب" & i
		Dim cs As MyContact
		cs.Initialize
		cs.name=name
		cs.number=number
		lst.add(cs)
	Next
End Sub

 

وقتی هم روی لیست کلیک شد ایندکس رو به متد زیر پاس بدید

Private Sub addContact(index As Int)
	Dim cs As MyContact =lst.Get(index)
	InsertContact ( cs.name , cs.number )
End Sub

 

من نمیدونم هدف و بیزینس کارتون چیه. چیکا میخواین بکنید دقیقا؟

استاد خیلی زحمت کشیدید. تشکر

 

هدف من ساختن برنامه ای هست که شماره موبایل به صورت رندم تولید میکنه و توی مخاطبین ذخیره میکنه
همه چی اوکیه، به جز ذخیره در مخاطبین که وقتی تعداد شماره ها میشه چندصدتا، برنامه کرش میکنه

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

Public Sub InsertContact(Name As String, Phone As String) As cuContact
	Dim values As ContentValues
	values.Initialize
	values.PutNull("account_name")
	values.PutNull("account_type")
	Dim rawUri As Uri = cr.Insert(rawContactUri, values)
	Dim rawContactId As Long = rawUri.ParseId
	
	values.Initialize
	values.PutLong("raw_contact_id", rawContactId)
	values.PutString("mimetype", "vnd.android.cursor.item/phone_v2")
	values.PutString("data1", Phone)
	cr.Insert(dataUri, values)
	
	values.Initialize
	values.PutLong("raw_contact_id", rawContactId)
	values.PutString("mimetype", "vnd.android.cursor.item/name")
	values.PutString("data1", Name)
	cr.Insert(dataUri, values)
	Dim cu As cuContact
	cu.Initialize
	Dim crsr As Cursor = cr.Query(dataUri, Array As String("contact_id", "display_name"), "raw_contact_id = ?", _
		Array As String(rawContactId), "")
	crsr.Position = 0
	cu.DisplayName = crsr.GetString("display_name")
	cu.Id = crsr.GetLong("contact_id")
	Return cu
End Sub

بعد با فراخوانی و مقداردهی این تابع، شروع به ثبت شماره تلفن های ساخته شده در کانتکت گوشی میکنه:

cu.InsertContact(name,number))

cu اسم ماژولمه که تعریفش کردم

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

اما توی تعداد کم اوکیه

این مشکلو میخواستم حل کنم

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

  • 0
در ۱۴۰۳/۶/۲۶ در ۰۷:۰۵، محمدرضا شاهپیری گفته است:

یه کلاس بسازید مثلا به نام MyContact به شکل زیر

Sub Class_Globals
	Public name , number As String
End Sub

Public Sub Initialize
	
End Sub

متد ساخت شماره ها ه مبه شکل زیر میشه

Public Sub generateNumbers
	For i=1 To 50
		Private a,b,c,d,e,f,g As String
		Private number  As String
		Private name  As String
		a=Rnd(0,9)
		b=Rnd(0,9)
		c=Rnd(0,9)
		d=Rnd(0,9)
		e=Rnd(0,9)
		f=Rnd(0,9)
		g=Rnd(0,9)
		number="0912"&a&b&c&d&e&f&g
		name="مخاطب" & i
		Dim cs As MyContact
		cs.Initialize
		cs.name=name
		cs.number=number
		lst.add(cs)
	Next
End Sub

 

وقتی هم روی لیست کلیک شد ایندکس رو به متد زیر پاس بدید

Private Sub addContact(index As Int)
	Dim cs As MyContact =lst.Get(index)
	InsertContact ( cs.name , cs.number )
End Sub

 

من نمیدونم هدف و بیزینس کارتون چیه. چیکا میخواین بکنید دقیقا؟

استاد ببخشید اگه بخوایم این دستورات رو ببریم داخل این کتابخونه PersianAsyncTask، چه طوری باید بازنویسی بشه؟!
آموزشو سورس کدو همه رو دیدم، اما نتونستم بازنویسیش کنم

ممنون میشم کمکم کنید

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

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

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

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