سلام دوستان امیدوارم حالتون خوب باشد ، همان طور که قول دادم کتاب خانه ی جاوای mhrCrud آماده کردیم و به صورت رایگان برای اعضا قرار میدهیم.
دانلود “کتاب خانه mhrCrud” mhrCrudv1_java.zip – Downloaded 168 times – 7 KB
لطفا ابتدا کتاب خانه را دانلود کنید ( دانلود برای اعضای سایت رایگان میباشد ، عضویت رایگان میباشد )
توجه کنید که این کتاب خانه به کتاب خانه Android Asynchronous Http Client نیاز دارد که باید آن را از لینک زیر دانلود کنید .
https://search.maven.org/remotecontent?filepath=com/loopj/android/android-async-http/1.4.8/android-async-http-1.4.8.jar
الحاق کتاب خانه ها به پرونده ی اصلی
الحاق کتاب خانه به پروژه اندروید استودیو در سایت قبلا قرار گرفته بوده است : مشاهده ی پست
توجه کنید که هم کتاب خانه ی mhrCrud و هم کتاب خانه ی Android Async Http Client را به پروژه پیوست دهید .
آماده سازی اسکریپت تحت سرور کتاب خانه
شما باید فایل crudOptimized.php را در هاستتان آپلود کنید ( در پوشه ی public_html یا زیر شاخه های آن ) و ترجیحا نام فایل را عوض کنید .
این اسکریپت بر اساس mhrCrud ساخته شده است که نحوه ی کانفیگ کردن آن را قبلا در سایت قرار داده بودم : مشاهده ی پست
در این نسخه ویرایش شده یک تفاوت وجود دارد و آن افزوده شدن بخش token است .
اما توکن چیست ؟
ما در اسکریپت و کتاب خانه مقداری به نام توکن قرار داده ایم که باید بخش تحت سرور و کتاب خانه ی آن همخوانی داشته باشند. حتما در خط دوم که کد زیر قرار دارد ، مقدار رشته ی توکن را تغییر دهید ( به هر رشته ایی که میخواهید ) و مقدار آن را کپی کنید زیرا در کتاب خانه به آن نیاز داریم .
|
$token = "RANDOM TOKEN HERE"; |
برای مثال :
|
$token = "asdj@oojalKam203Aaf"; |
خوب توکن ما آماده است و بخش تحت سرور هم کانفیگ شده است .
استفاده از کتاب خانه ی mhrCrud در جاوا
ابتدا در کلاس مد نظرتان ایمپورت زیر را انجام دهید .
|
import com.mhr_developer.mhrCrud.clientside.*; |
الان ما کلاس های کتاب خانه را داریم . ابتدا یک آبجکت از نوع mhrCrudClient میسازیم که کلاس مان را به آن تعریف کنیم .
|
mhrCrudClient client = new mhrCrudClient(); |
کلاس ما شامل ۴ متد اصلی میباشد که به ترتیب توضیح میدهم .
قبل از شروع باید ذکر کنم که این کتاب خانه یک کلاس اینترفیس به نام executedHandler دارد که ۳ متد میخواهد :
متد onSuccess با خروجی boolean که برای کوئری هایی که دستور دارند و مقدار خروجی ندارند ( مانند insert, update, delete ) استفاده میشود . و اگر کوئری انجام شود مقدار true در غیر اینصورت مقدار false را بر میگرداند.
متد onSuccess با خروجی List<HashMap> که یک لیست با هش مپ ها برمیگرداند و برای بدست آوردن خروجی کوئری select استفاده میشود . هر ایتم لیست ( هش مپ ) نشان دهنده ی یک ریکورد و هر ایتم هش مپ نشان دهنده ی فیلد مد نظر است . key ها هم در هش مپ نام فیلد میباشند .
متد onError با خروجی String که رشته ی اررور را بر میگرداند . در ادامه درباره ی اررو ها توضیح خواهم داد .
متد setServerSideUrl
این متد یک ورودی String میگیرد که باید آدرس دقیق فایل اسکریپت تحت سرورتان را به ان بدهید . برای مثال :
|
client.setServerSideUrl("http://x.x.x.x/crudapi/mhrcrud.php"); |
متد setToken
این متد یک ورودی String میگیرد که همان توکن تحت سرور ما میباشد ( بدون تعریف این مقدار ، کتاب خانه حتما به شما خطا میدهد ! )
متد commandExecute
این متد برای اجرای کوئری هایی میباشند که خروجی فقط true یا false دارند ( مانند insert , delete , update ) و مقداری را به عنوان داده مورد نظر بر نمی گردانند.
ورودی اول ما کوئری که String هست ، میباشد . کوئری را کامل وارد کنید .
ورودی دوم ما بایند ها میباشد که از نوع List<String> میباشد . توجه کنید که برای باند کردن در کوئری از ? استفاده کنید و تعداد بایند ها و ? باید یکسان باشند.
ورودی سوم ما یک executedHandler میباشد. توجه کنید که حتما متد را در try catch قرار دهید .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
List<String> params = new ArrayList<String>(); params.add("6"); try { client.commandExecute("DELETE FROM `likes` WHERE id < ?", params, new executedHandler() { @Override public void onSuccess(boolean b) { // باید مقدار b را چک کنیم } @Override public void onSuccess(List<HashMap> list) { // برای این متد کاربردی ندارد } @Override public void onError(String s) { // یک خطا با رشته ی e } }); }catch (Exception e){ // یک خطا با رشته ی e.getMessage() } |
متد commandSelect
این متد برای کوئری Select استفاده میشود . ورودی های این متد همانند ورودی های متد قبلی میباشد ولی توجه کنید که در این متد onSuccess با خروجی boolean کاربردی ندارد .
مثال :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
final TextView tv = (TextView) findViewById(R.id.textView); List<String> params = new ArrayList<String>(); params.add("6"); try { client.commandSelect("SELECT * FROM `likes`", new ArrayList<String>(), new executedHandler() { @Override public void onSuccess(boolean b) { //کاربدی ندارد } @Override public void onSuccess(List<HashMap> list) { // ما خروجی ها را داریم ، یک مثال برای نمایش در تکتس ویو tv.setText(list.toString()); /* بدست آوردن اطلاعات Toast.makeText(getApplicationContext(), Integer.toString(list.get(0).get("id")), Toast.LENGTH_SHORT).show(); */ } @Override public void onError(String s) { } }); }catch (Exception e){ // یک خطا با رشته ی e.getMessage() } |
خطا های سمت سرور
ERR@ACCESS_DENIED : توکن اشتباه است
ERR@CONNECTION : اطلاعات دیتابیس در اسکریپت اشتباه است .
ERR@QUERY_IS_UNDEFINED و ERR@TYPE_IS_UNDEFINED : این خطاها به کتاب خانه مربوط میشود و در صورت بروز لطفا گذارش دهید .
در غیر اینصورت خطی ها به صورت متن داده میشوند که به کتاب خانه مربوط نمیباشند .
توجه کنید که این کتاب خانه با کوئری های Insert , Select , Delete , Update تست شده است .
سلام وخسته نباشید
این کدها رو مگه نباید توی asyncron thread گذاشت چون روی نخ اصلی اگه اجرا بشن مشکلاتی بوجود میاد؟
کد آسنکرون رو میذارید؟
ممنون
async هستند و به صورت callback