رفتن به مطلب

محمدرضا شاهپیری

مدیر کل سایت
  • تعداد ارسال ها

    4,205
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    872

تمامی مطالب نوشته شده توسط محمدرضا شاهپیری

  1. وارد سایت زیر بشید و لاگین کنید. https://gorest.co.in/consumer/login مطابق صفحه زیر توکن رو بگیرید توکن رو طبق شکل زیر جایگزین کنید توی کلاس PrRetrofit و متد retrofit_intercept دقت کنید توکن باید همراه Bearer و یه فاصله باشه دقیقا مطابق سورس. دیگه نباید مشکلی باشه
  2. من فعلا وقت نمیکنم دوست عزیز تا آخر ماه شاید سرم خلوت شه. تو نت سرچ کنید آموزش زیاد هست.
  3. من php کار نکردم دوست عزیز فقط در حد مقدماتی. برای وب سرویس نوشتن پایتون گزینه فوقلاده ای هست و خیلی راحت و سریع میتونید بک اند اپ رو پیاده کنید. اگه خودتون بلد نیستید حتما به یه api نویس و وب کار بدین بنویسه
  4. سلام و درود. api هایی که تو آموزش استفاده شده با پایتون-جنگو نوشته شده که تو پنل قرار گرفت. درمورد اتصال به اینترنت هم تو انجمن تاپیک زیاد هست در موردش جستجو کنید پیدا میکنید
  5. بله دوست عزیز. کرش میکنه. این کلاسها نیاز هست برای کتابخونه
  6. سلام و درود. امیدوارم حالتون خوب باشه از بین چهار کامپوننت اصلی اندروید رسیورها یکی از مهمترینهاش هست. از اونها برای اسال رویداد بین برنامه ها و یا بین خود کامپوننتها استفاده میشه. همینطور برای دریافت اعلانهای سیستمی مثل اس ام اس یا تماس ازشون استفاده میشه. این قابلیت جدیدا به صورت نیتیو به b4a اضافه شده هر چند کامل این کار رو نکرده. بریم که ببینیم به چه شکل باید استفاده کنیم. اول از منوی Project->Add New Module->Receiver Module یه رسیور مثلا به نام TestReceiver ایجاد میکنیم. Sub Process_Globals End Sub Private Sub Receiver_Receive (FirstTime As Boolean, StartingIntent As Intent) Log(StartingIntent.Action) End Sub به طور کلی به دو صورت میتونیم رسیورها رو توی اندروید ثبت کنیم. 1- از طریق منیفست یا استاتیک: یکی از روشهای ثبت رسیور از طریق منیفست هست. البته این روش برای اکثر اعلانها تو نسخه های جدید اندروید غیر فعال شده. مثلا میخوایم بوت شدن دستگاه رو بفهمیم. به منیفست کدهای زیر رو اضافه میکنیم. AddPermission(android.permission.RECEIVE_BOOT_COMPLETED) AddReceiverText(TestReceiver, <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter>) 2-از طریق کدنویسی یا داینامیک: اینجا رو دیگه ارل یادش رفته و براش راه حلی نزاشته. ولی ما که نمیزاریم چیزی لنگ بمونه این روش روش پیشنهادی و استاندارد گوگل هست. کدهای زیر رو به اکتیوتی یا سرویس اضافه کنید اضافه کنید. #If java import android.content.BroadcastReceiver; import android.content.Context; import android.content.IntentFilter; import android.os.Build; import java.lang.reflect.Constructor; public void registerReceiver(Object receiverClass, String[] actions) throws Exception{ IntentFilter intentFilter=new IntentFilter(); for (String action:actions) { intentFilter.addAction(action); } String className=receiverClass.toString().replace("class ",""); Class<?> clazz = Class.forName(className); Constructor<?> cons = clazz.getConstructor(); cons.setAccessible(true); final BroadcastReceiver receiver =(BroadcastReceiver) cons.newInstance(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { registerReceiver(receiver,intentFilter,Context.RECEIVER_EXPORTED); }else { registerReceiver(receiver,intentFilter); } } public void unregisterReceiver(Object receiverClass) throws Exception{ String className=receiverClass.toString().replace("class ",""); Class<?> clazz = Class.forName(className); Constructor<?> cons = clazz.getConstructor(); cons.setAccessible(true); BroadcastReceiver receiver =(BroadcastReceiver) cons.newInstance(); unregisterReceiver(receiver); } #End If و به صورت زیر رسیور رو ثبت کنید. مثلا میخوایم هر وقت دقیقه گوشی عوض شد متوجه بشیم. Dim jo As JavaObject jo.InitializeContext.RunMethod("registerReceiver",Array(TestReceiver,Array As String("android.intent.action.TIME_TICK"))) این مواردی که تا الان عرض شد برای اعلانهای سیستمی هست، اما یکی از مهمترین قابلیتهای رسیور اینه که ما میتونیم رسیور دلخواه خودمونو هم ثبت کنیم که خب خیلی کاربردی هست. مثلا میخوایم یه اعلان با اکشن com.action.TEST ثبت کنیم. به صورت زیر ثبتش میکنیم Dim jo As JavaObject jo.InitializeContext.RunMethod("registerReceiver",Array(TestReceiver,Array As String("com.action.TEST"))) و حالا برای صدا زدن اعلان به شکل زیر عمل میکنیم. اول کتابخونه phone رو تیک میزنیم. Dim phone As Phone Dim i As Intent i.Initialize("com.action.TEST","") i.PutExtra("key","value") phone.SendBroadcastIntent(i) حتما توجه داشته باشین که بعد از استفاده اونو unregister کنید.به شکل زیر Dim jo As JavaObject jo.InitializeContext.RunMethod("unregisterReceiver",Array(TestReceiver,Null)) سورس هم پیوست شد receiver.zip مانا باشید
  7. نسخه جدید اضافه شد و آموزش تصویری به پست اول اضافه شد
  8. عزیز من تست کردم هیچ مشکلی نداره. موارد زیر رو دانلود کنید و کلا یه پوشه sdk جدید بسازید و داخلش بریزید فایها رو.b4a هم نسخه آخر باشه. سورس هم نسخه آخر. نباید مشکلی باشه https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip https://www.b4x.com/android/files/resources_11_22.zip
  9. با سلام خدمت عزیزان برنامه نویس پروژه ای که مدت خیلی طولانی هست درگیرش بودیم خدا رو شکر به نتیجه رسید و به نسخه پایدار رسید. بارها مکانیزم پروژه عوض شد تا راحت ترین و ساده ترین تجربه کاربری برای دوستان به وجود بیاد و دیگه درگیر پیچیدگی های جاوا و کدهای پس زمینه نشید. برسیم سراغ کتابخونه Retrofit یک کتابخانه‌ی فوقلاده قوی اندرویدی برای کار با وب سرویس هستش. به خاطر استفاده از annotation و interface خیلی سریع راه اندازی میشه و امکانات خیلی زیادی بهتون میده. خب دیگه چونه بسسه بریم سراغ آموزش. 1: راه اندازی Dim pRetrofit As PersianRetrofit pRetrofit.Initialize("retrofit").baseUrl("http://192.168.129.115:8000/").addConverterFactory _ .addInterceptor.addAuthenticator.build متد addConverterFactory برای تبدیل کلاس جاوا به جیسون هست. به راحتی میتونید کلاس بفرستید به سرور متد addInterceptor برای اینه که بخواین به صورت اتوماتیک به همه ریکوئستها یه کانفیگ رو ست کنید. مثلا میخواین تو همه ریکوئستها هدر Authorization بفرستید. به شکل زیر میشه Private Sub retrofit_intercept(request As Request) request.addHeader("Authorization","Bearer "&accessToken) End Sub متد addAuthenticator برای احراز هویت هست و به طور کلی برای رفرش کردن توکن هست. زمانی که ارور 401 (Unauthorized) متد زیر اجرا میشه و شما باید توکن جدید بگیرید و به ریکوئست پاس بدید Private Sub retrofit_authenticate As Map Dim token As String= getAccessToken(uc.RefreshToken) Dim map As Map map.Initialize map.Put("Authorization","Bearer "&token) Return map End Sub 2: استفاده از متدها به طور کلی برای ارسال درخواست یک کلاس از نوع RequestBuilder باید ساخته بشه و به شکل زیر راه اندازی بشه GET Dim queries As Map:queries.Initialize queries.Put("key1","value1") Dim requestBuilder As RequestBuilder requestBuilder.setMethod(requestBuilder.GET) _ .setEndpoint("public/v2/users").setQueries(queries) POST Dim user As User user.Initialize user.username=username user.password=password Dim requestBuilder As RequestBuilder requestBuilder.setMethod(requestBuilder.POST).setBody(user).setEndpoint("api/token/") MULTIPART Dim imbl As List imbl.Initialize imbl.Add(MultipartUtils.createPartBody("file","image.png",image)) Dim bm As Map bm.Initialize bm.Put("content",MultipartUtils.creteStringBody("image from persian retrofit")) Dim requestBuilder As RequestBuilder requestBuilder.setMethod(requestBuilder.MULTIPART).setEndpoint("api/upload_image/") _ .setMultipartParts(imbl).setMultipartParams(bm) 3: اجرای درخواست برای ارسال و اجرای درخواست به دوصورت میتونیم عمل کنیم 1: Async (اجرا در نخ جداگانه) pRetrofit.enqueue(requestBuilder,"login") Wait For retrofit_onResponse(response As Response) If response.isSuccessful Then Dim body As String=response.body Dim JSON As JSONParser JSON.Initialize(body) Dim resp As Map= JSON.NextObject Log(resp.Get("access")) Else Log(response.error) End If 2: Sync (اجرا در نخ اصلی یا همون main ) Dim response As Response=pRetrofit.execute(requestBuilder) If response.isSuccessful Then Dim body As String=response.body Dim JSON As JSONParser JSON.Initialize(body) Dim resp As Map= JSON.NextObject Log(resp.Get("access")) Else Log(response.error) End If آموزش تصویری 1:آموزش کتابخانه PersianRetrofit قسمت ۱ (مقدماتی) https://www.youtube.com/watch?v=t7VrsePFSmU -------------------------------------------------------------------------------------------------------- 2:آموزش کتابخانه PersianRetrofit قسمت ۲ (مقدماتی) https://www.youtube.com/watch?v=6_i4myiSM1s -------------------------------------------------------------------------------------------------------- 3:آموزش کتابخانه PersianRetrofit قسمت ۳(احراز هویت خودکار) https://www.youtube.com/watch?v=YxqCFRS0e1o -------------------------------------------------------------------------------------------------------- 4:آموزش کتابخانه PersianRetrofit قسمت ۴(دانلود) https://www.youtube.com/watch?v=gUfPSHSRDO0 -------------------------------------------------------------------------------------------------------- 5:آموزش کتابخانه PersianRetrofit قسمت ۵(آپلود) https://www.youtube.com/watch?v=W5W6WZikDHs تمام Have fun
  10. خطا مربوط به کتابخونه نیست. میگه محصولات اشتراکی قابل مصرف نیستن.
  11. یه متد جداگونه بنویسید واسه مصرف کردن خرید بعد توی onIabPurchaseFinished با دستور calsubdelayed اونو صدا بزنید ببینید اکی میشه یا نه‌ نتیجه رو اعلام کنید لطفا
  12. نسخه قبل مشکل داشت و اینکه روی نسخه ۱.۴ مایکت بود. نسخه فعلی مشکلات رفع شده و به نسخه ۱.۶ که نسخه آخر مایکت هست به روز شده. حتما به نسخه جدید آپدیت کنید
  13. سلام و درود. کتابخانه به روز شد نسخه جدید رو دریافت کنید
  14. سلام و درود. این موارد توی آموزشها هست Dim post As PostRequest post=prfn.BuildPostQuery("url","tag") post.addParametrs("ke1","value1") post.addParametrs("ke2","value2") post.addParametrs("ke3","value3")
  15. نسخه بیسیک رو حتما به روز کنید. همینطور sdk و فایلهای extra رو از سایت مرجع بگیرید و سمپلی که گذاشتم رو تست کنید
  16. سلام. نسخه 3 رو دانلود کنید و همچنین نسخه b4a و sdk هم نسخه آخر باشه فک کنم دیگه نیازی به تغییر sdk نیست
  17. از منوی بالای انجمن قسمت فروشگاه و مدیریت خرید دانلود کنید
  18. این کتابخونه به زودی با کتابخوته retrofit جایگزین میشه که به مراتب قدرتمندتره و امکاناتش بیشتره.
  19. سلام و درود. از wait For استفاده نکنید. متدهای success و error رو به صورت ایونت پیاده کنید. تایم اوت رو هم بالا بزارید یک دیقه معمولا میزارن
  20. به جای کد زیر toast.requestDrawPermission از روش زیر استفاده کنید. اول متد زیر رو به اکتیویتی اضافه کنید #if java import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.provider.Settings; public void requestDrawPermission() { Context context = BA.applicationContext; if (Build.VERSION.SDK_INT > 23 && !Settings.canDrawOverlays(context)) { Intent intent = new Intent( Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.getPackageName()) ); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } #end if حالا کتابخونه javaobject رو تیک بزنید و به شکل زیر متد رو صدا بزنید Dim jo As JavaObject jo.InitializeContext.RunMethod("requestDrawPermission",Null)
  21. شما متد Build رو صدا نزدین. قبل از نمایش باید این متد رو صدا بزنید که ویوها ساخته بشه. کدتون به شکل زیر باید باشه toast.Initialize("toast").Title("test").Icon(LoadBitmap(File.DirAssets,"caution1.png")).Build.Show قبل از همه چیز هم باید متد زیر رو صدا بزنید و دسترسی ترسیم رو بگیرید toast.requestDrawPermission
  22. آخرین نسخه موجود 5.11 هست از پنل دانلود و جایگزین کنید
  23. سلام و درود. از اونجایی که DsTabLayout از نسخه ساپورت استفاده میکنه و کتابخونه قدیمی و منسوخ شده هست و ریسایکلر ویو نسخه androidX هست احتمال اینکه تداخل داشته باشن خیلی زیاده. من که اصلا نتونستم از DsTabLayout استفاده کنم چون خطا میده و کامپایل نمیشه. اما اگه تداخل نداشته باشن به نظرم میتونید با هم استفاده کنید. به دوتا متد زیر توجه کنید Private Sub prrecycler_onScrollStateChanged(newState As Int) If newState==prRecycler.SCROLL_STATE_IDLE Then If prRecycler.AdapterPosition<>-1 Then dsTabLayout.SelectTab(prRecycler.AdapterPosition) End If End If End Sub Private Sub dstab_TabSelected(Index As Int, SelectedTab As String, Tag As Object) prRecycler.scrollToPosition(Index) End Sub درمورد سوال دوم هم که عرض شد. متد رو باید مستقیم از خود ریسایکلر صدا بزنید prRecycler.disableItemChangeAnimation
  24. سلام ودرود. از منوی بالای انجمن قسمت فروشگاه مدیریت خرید رو انتخاب کنید
×
×
  • اضافه کردن...