هم اکنون عضو شوید

ورود

فراموشی گذرواژه

گذروازه خود را فراموش کردید ؟

ورود

عضو شوید

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

آموزش آپلود عکس با استفاده از کتاب خانه Retrofit

آموزش آپلود عکس با استفاده از کتاب خانه Retrofit

سلام امیدوارم حالتان خوب باشد در این سری از آموزش برنامه نویسی اندروید به آموزش آپلود عکس با استفاده از کتاب خانه Retrofit در این آموزش بعد از انتخاب عکس توسط کاربر عکس به سمت سرور ارسال می شود این عمل توسط php انجام می شود یعنی php در اینجا یک api واسط است که بعد ارسال فایل آن را در جدول مربوط به آن Insert می کند تا بعدا قابل دسترسی باشد در ادامه با ما همراه باشید.

 

ابتدا باید یک یک جدول به نام images ایجاد کنیم با کد زیر می توانید آن را ایجاد کنید.

در بالا هر عکس شامل یک id یک توضیحات . یک url عکس خواهد بود.

شما می توانید این پروژه را در xampp پیاده سازی کنید.

یک فایل php به نام Constants.php ایجاد کرده و کدهای زیر را در آن قرار دهید.

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

یک فایل دیگر به نام  DbConnect.php ایجاد کرده و کدهای زیر را در آن قرار دهید.

این کد connection بین دیتابیس را با برنامه برقرار می کند.

یک پوشه به نام ImageUploadApi و یک پوشه به نام uploads  ایجاد کنید در صورت ایجاد نکردن فایل آپلود نخواهد شد در بعضی موارد ممکنه اتوماتیک پوشه ساخته نشود.

یک فایل دیگر به نام FileHandler.php ایجاد کنید و کدهای زیر را در آن قرار دهید.

کد بالا بعد از آپلود عکس آدرس آن را در table مربوط به آن با یک آیدی خاص و با توضیحات  Insert می کند. نکته اگر سایت یا هاست شما https است مقدار http در کد بالا به https تغییر دهید.

یک فایل php دیگر به نام Api.php ایجاد کنید و کدهای زیر را در آن قرار دهید.

کد بالا بعد از اینکه عمل post به آن انجام شد دو object از json برای ما بر می گرداند که همانند زیر است در صورتی که فایل به درستی آپلود شود.

در صورتی که خطا دهید مقدار error برابر با true خواهد بود.

کد php به پایان رسید.

برویم به سرغ بخش کد برنامه

ابتدا باید دو کتاب خانه زیر را به پروژه اضافه کنید دو خط زیر را باید به فایل Build.gradle اضافه کنید.

یک کلاس model به نام MyResponse.java ایجاد کنید و کدهای زیر را در آن قرار دهید.

کدهای بالا همان خروجی های ما در json است.

یک کلاس به نام Api.java ایجاد کنید و کدهای زیر را در آن قرار دهید.

در بالا باید آدرس سایتی که می خواهید بهش request ارسال کنید تا فایل آپلود شود را قرار دهید. بخش های دیگر را تغییر ندهید !

یک لایه به نام activity_main.xml ایجاد کنید و کدهای زیر را در آن قرار دهید.

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

وارد فایل AndroidManifes.xml شده و دسترسی های زیر را اضافه کنید.

دسترسی برای اینترنت و خواندن حافظه

و در نهایت یک در MainActivity.java کدهای زیر را قرار می دهیم.

در بالا یک متود به نام getRealPathFromURI وجود دارد که آدرس فایل در گوشی را به دست می آورد. بعد از کلیک بروی دکمه Chosser به نمایش در می آید و شما باید عکس را انتخاب کنید سپس بعد از انتخاب در onActivityResult مسیر دریافت می شود ولی به صورت کلی غیر قابل استفاده است پس با استفاده از getRealPathFromURI آدرس اصلی آن را به دست می آوریم یک متود دیگر به نام uploadFile داریم که عمل آپلود را با استفاده از کتاب خانه Retrofit انجام می دهد.

 

این آموزش هم به پایان رسید.

 

موفق و پیروز باشید.

درباره نویسنده

با زبان های برنامه نویسی C# , Java , Php به صورت تخصصی کار کردم و بیشتر وقتم رو در برنامه نویسی می گذرونم علاقه زیادی به ساخت اپلیکیشن اندروید دارم.

نظرها ( ۳ )

  1. MH
    ۶, تیر , ۱۳۹۷ در ۳:۳۱ ب.ظ

    سلام
    مرسی از آموزشهاتون
    من کدهای بالا رو دقیقا مشابه شما نوشتم ولی response.body().error رو null برمیگردونه
    دلیلش چیه ؟

  2. محمد
    ۲۶, شهریور , ۱۳۹۹ در ۱۰:۱۵ ب.ظ

    سلام به من این ارور رو برمیگردونه در تست علت ش چیه اگه روی گیت هاب پروژه هست ادرس رو قرا بدید ممنون
    java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

    • امید حدیدی
      ۱۷, مهر , ۱۳۹۹ در ۱۲:۵۱ ب.ظ

      شما میتونید در فایل اینترفیس زمانی که درخوسا رو پست میکنید این دستور رو اضافه کنید
      @Headers(“Content-Type: application/json”).

      یعنی به این صورت بشه
      @Headers(“Content-Type: application/json”)
      @Multipart
      @POST(“Api.php?apicall=upload”)
      Call uploadImage(@Part(“image\”; filename=\”myfile.jpg\” “) RequestBody file, @Part(“desc”) RequestBody desc);