اطلاعیه

کاربر گرامی

به انجمن برنامه نویسی AnswerCenter.ir خوش آمدید

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


Gray Mind

مدیر بخش
  • تعداد ارسال ها

    567
  • تاریخ عضویت

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

  • روز های برد

    21

آخرین بار برد Gray Mind در اردیبهشت 17

Gray Mind یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

903 عالی

1 دنبال کننده

درباره Gray Mind

  • درجه
    کاربر حرفه ای

آخرین بازدید کنندگان نمایه

5,922 بازدید کننده نمایه
  1. داخل متد onBindViewHolder بیاید و یک switch case تعریف کنید بر اساس position که بهتون میده تصمیم بگیرید به کدوم اکتیوتی بره : @Override public void onBindViewHolder(@NonNull ClubViewHolder holder, final int position) { final Intent intent; holder.cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { switch(position){ case 0: intent = new Intent(context, SomeActivity.class); break; case 1: intent = new Intent(context, SomeActivity.class); break; } startActivity(intent); } }); }
  2. مطمئن هستید که ارتباط به درستی برقرار میشه؟ لاگ هارو بررسی کنید ممکنه توی اطلاعات چاپی از سمت سرور مشکلی وجود داشته باشه یا جیسون رو نتونه parse کنه این نکته رو یادتون باشه که ممکنه شرط response.isSuccessful() اجرا بشه اما مشکل در اطلاعات چاپی وجود داشته باشه چون این دستور چک میکنه از سمت سرور اطلاعات رو بدون مشکل تونسته بگیره یا نه و اگر سمت کلاینت اندروید مشکلی وجود داشته باشه مربوط به کلاینته پس باز هم همین شرط اجرا میشه بررسی کنید اگه لاگی وجود داره اروری وجود داره اعلام کنید که به کمک هم حلش کنیم موفق باشید
  3. CountryModel item = getCountryByName("iran"); item.cities(); item.cities یک لیست هستش که میتونید ازش استفاده کنید کافی بود یکم دقت میکردید به کد ها موفق باشید
  4. سلام کتابخانه Gson رو اضافه کنید به پروژه تون یه کلاس مدل بسازید به اسم Cities : public class Cities{ @SerializedName("name") @Expose private String name; public String getName(){ return name; } } یه کلاس مدل دیگه بسازید به اسم CountryModel : public class CountryModel{ @SerializedName("name") @Expose private String name; @SerializedName("cities") @Expose private ArrayList<Cities> cities = new ArrayList<>(); public String getName(){ return name; } public ArrayList<Cities> getCities(){ return cities; } } خوب حالا با استفاده از کتابخونه Gson گوگل میایم و Deserialize میکنیم تا تبدیل بشه به آبجکت : Gson gson = new Gson(); String json = "json"; Type listType = new TypeToken<ArrayList<CountryModel>>(){}.getType(); ArrayList<CountryModel> countryList = gson.fromJson(json, listType); به همین سادگی موفق باشید
  5. اول اینکه همونطور که جناب شاهپیری گفتن از یه List یا ArrayList استفاده کنید من تاحالا با این روش کار نکردم و منطقی هم نیست به نظرم یه کلاس بسازید به این صورت : public class DataModel{ private String name; private String title_news; private String url; public void setName(String name){ this.name = name; } public void setTitleNews(String title_news){ this.title_news = title_news; } public void setUrl(String url){ this.url = url; } public String getName(){ return name; } public String getTitleNews(){ return title_news; } public String getUrl(){ return url; } } حالا ArrayAdapter رو از نوع استرینگ نذار و اینطوری تعریفش کن public class MyArrayAdapter extends ArrayAdapter<DataModel>{ ArrayList<DataModel> mList = new ArrayList<DataModel>(); public MyArrayAdapter(Context context, ArrayList<DataModel> myList){ super(context, R.layout.adapter_layout, myList); mList = myList; } public View getViews(int position, ...){ textView.setText(mList.get(position).getTitleNews()); } } حالا برای بار های بعد اگه بخوای لیستت رو آپدیت کنی باید اینطوری آپدیتش کنی adapter = new MyArrayAdapter(this, list); adapter.notifyDataSetChanged(); این باید جواب بده البته حالا که کداتو نوشتی و نمیخوای عوضشون کنی سعی کن به آرایه قبلیت اضافه کنی جدید هارو و notifyDataSetChanged رو صدا بزن ببین تاثیری داره یا نه موفق باشی
  6. نیازی به این همه کتاب و این چیزا نیست دوست عزیز همه مون اولش مثل شما بودیم و سر چند راهی گیر کرده بودیم اول اینکه شما چند وقته دارید آموزش هارو میبینید و دوتا پک آموزشی هم تموم کردی یه سوال چرا برنامه ای ننوشتید؟ و وقتی کد نمیزنید چطور انتظار دارید برنامه نویسی رو درک کنید؟ ساختار یه برنامه رو درک کنید؟ بشینید و چندتا برنامه ی تمرینی بنویسید مثلا دفترچه یادداشت که میتونید توش کار با دیتابیس و ساخت تنظیمات رو یاد بگیرید یا مثلا یه گالری تصاویر و... بذار یه چیزی رو بهتون بگم داداشم تا وقتی دست به کد نشدی هیچ چیزی یاد نمیگیری تو برنامه نویسی دونستن مفاهیم و خوندن و به روز بودن و حتی دونستن چگونگی کارکرد برنامه ها خوبه که هیچ عالیه اما تا وقتی شما نتونی تبدیل به کد بکنیشون هیچ ارزشی نداره و دنیا پره از آدمایی که فقط میخونن اما عمل ندارن ... نصیحت من به شما اینه که اول بشینی یه پروژه تمرینی بنویسی دوم اینکه هرجا ارور یا مشکلی داشتی سرچ کنی ( با استک اورفلو و سایت های ارائه راه حل آشنا شو ) و مهمتر از همه اینکه خودتو درگیر دوراهی ها و... نکن یهو خودتو بنداز وسط ببین چند چندی موفق باشی
  7. هیچ هزینه ای از شما نمیگیرن هرتعداد برنامه و بازی میتونید بذارید آپدیت کنید و... فقط سالانه 40 هزار تومان حق عضویت و فعالیت باید بپردازید
  8. یه راهش اینه که شما یه کلاس interface بسازید و توی اکتیویتی یا فرگمنتی که میخواید مقادیر اداپتر رو بگیرید Implement کنید و در کانستراکتور(متد سازنده ی اداپتر) یک نمونه از این اینترفیس رو بگیرید و در آخر ازش استفاده کنید به ترتیب اول یه کلاس اینترفیس میسازیم : public interface GetValue{ void ItemValue(String value); // mitone har data type bashe : int value , String value and ... } دوم اکتیویتی رو ایمپلمنت میکنیم و ازش استفاده میکنیم : public class MainActivity extends AppCompatActivity implements GetValue{ public void onCreate(){ adapter = new RecyclerAdapter(list , this); // this baraye vorodie interface ke sakhtim hast chon activity ro implement kardim pas this ro midim behesh recyclerview.setAdapter(adapter); } @Override public void ItemValue(String value){ // inja mitoni az meghdar value estefade koni } } سوم ازش توی اداپتر بهش مقدار میدیم : public class recyclerAdapter(){ private GetValue mListener; public recyclerAdapter(List list , GetValue listener){ this.mListener = listener; } public void onBindViewHolder(ViewHolder holder){ holder.item.setOnClickListener(new View.onClickListener{ public void onClick(){ mListener.ItemValue(holder.item.getText().toString()); // inja behesh meghdar ro midim } }) } } موفق باشی
  9. اصولا وقتی دارید مینویسید اگه از داخل باکس پیشنهادی enter بزنید خودش خودکار ایمپورت میکنه و نیازی نیست شما اینکارو بکنید اما وقتی دستی مینویسید میتونید با کلیک روش و زدن alt+enter کتابخونه رو ایمپورت کنید موفق باشید
  10. کاربردش برای دسترسی به همه ی مقادیر آرایه ها ، لیست ها و... هستش برای مثال شما ده تا عدد دارید و میخواید از همه شون استفاده کنید برای کار خاصی خوب مسلما شما نمیای و ده تا عدد رو برای هرکدوم یه متغیر تعریف کنید و میاید و به صورت آرایه تعریفش میکنید ما این اعداد رو داریم : 1,8,4,20,48,12,35,48,17,79 خوب فرض کنید توی یه آرایه این هارو مقدار دهی شده حالا خودمون تعریفش کردیم یا کدی که داریم مینویسیم همچین آرایه ای رو به ما داده (آرایه ی عددی و رشته ای فرقی نداره )و حالا میخوایم با هرکدوم از این عدد ها یه کاری رو انجام بدیم . هر خونه از آرایه یک اندیس داره که اندیس هر آرایه از عدد (0) شروع میشه تا (منهای 1 اندازه ی آرایه) که اینجا 10 هستش پس آخرین اندیس ما میشه 9 میایم و یه حلقه For یا doWhile تعریف میکنیم و با توجه به اندیسشون یه کاری رو انجام میدیم مثلا باهم جمعشون میکنیم خوب این یه مثال ساده بود که جاهای زیادی کاربرد داره موقع نوشتن برنامه ما با لیست های زیادی از جمله لیست مطالب و کار با دیتابیس و ... لازممون میشه مثال دیگه ای که میتونم بزنم ما یه پوشه داریم و توش چندتا آهنگ داریم میایم و مسیر همه ی آهنگ هارو میریزیم توی آرایه و توی حلقه ی for یا doWhile یکی یکی پاکشون میکنیم یا منتقلشون میکنیم یه پوشه ی دیگه امیدوارم تونسته باشم که مفهومشو منتقل کنم توصیه میکنم اول بخونید راجب این ها و بعد برید سمت کدنویسی وگرنه ممکنه گیجتون کنه موفق باشید
  11. Gray Mind

    کار باspiner

    این سورس رو که تو لینک زیر گذاشتم رو ببینید متوجه میشید چطوری باید یه اسپینر بسازید و...
  12. نه نیازی به پارس کردن دستی نیست همونطور که قبلا هم گفتم این کتابخونه هرچقدر هم تو در تو باشه کاملا خودکار پارس میکنه خوب شما کافیه یه مدل دیگه درست کنید دقیقا مثل CategoryModel و به نیاز چندتا متغیر که داخل جیسون آبجکت های لیست دوم هست تعریف میکنی SerializedName هارو ست میکنید و در آخر هم توی مدل اصلی میاید و یه متغیر از نوع اون کلاس مدل دوم تعریف میکنید و SerializedName رو برابر با اسم اون JsonArray میدین مثال زیر رو ببینید : ما این جیسون رو داریم : { "site":"answercenter" "users:[ { "id":1, "username":"Gray Mind", "name":"Benyamin" }, { "id":2, "username":" } ], "admin":{ "username":"izadi", "name":"Mehdi Izadi" } } خوب حالا ما سه تا کلاس مدل لازم داریم‌: SiteModel public class SiteModel { @SerializedName("site") @Expose private String site; @SerializedName("users") @Expose private ArrayList<UsersModel> users; @SerializedName("admin") @Expose private AdminModel admin; //getter setters } UsersModel : public class UsersModel{ @SerializedName("id") @Expose private int id; @SerializedName("username") @Expose private String username; @SerializedName("name") @Expose private String name; //getter setters } و در آخر AdminModel : public class AdminModel{ @SerializedName("username") @Expose private String username; @SerializedName("name") @Expose private String name; //getter setters } و درخواستمون هم همون مثل قبل هستش : @GET("EndPoint") Call<SiteModel> getSite(); به همین راحتی همه شون رو به صورت آبجکت برمیگردونه که البته یادتون نره getter و setter هارو هم بذارید همون getId و ... موفق باشید
  13. ارسال مقادیر فقط در حالت StringRequest امکان پذیر هستش و JsonArrayRequest همچین قابلیتی نداره شما میتونی یه کلاس بسازی و اکستندش کنی از Request یا StringRequest و مقادیر رو به همراهش بفرستی و دستی توی کلاسی که ساختین جیسون هارو پارس کنید تاحالا امتحان نکردم اما مطمئنن میشه اما پیشنهاد میکنم از کتابخانه ی رتروفیت استفاده کنید تا بتونید جیسون هارو به راحتی به صورت آبجکت تحویل بگیرید و به راحتی هم میتونید انواع مقادیر رو ارسال کنید موفق باشید
  14. پیشنهاد میدم استفاده از لیوت های استاندارد مثل LinearLayout رو یاد بگیرید که با وزن دادن میشه انواع لیوت های عمودی و افقی رو ساخت اما اگه بازم اصرار به درصد بندی دارید میتونید از این کتابخانه استفاده کنید : implementation 'com.android.support:percent:27.1.1' مثال : <android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:id="@+id/button" android:text="Button" android:layout_height="wrap_content" android:layout_alignParentTop="true" app:layout_widthPercent="30%"/> <Button android:id="@+id/button2" android:text="Button 2" android:layout_height="wrap_content" android:layout_toRightOf="@id/button" app:layout_widthPercent="60%"/> <Button android:id="@+id/button3" android:text="Button 3" android:layout_height="wrap_content" android:layout_below="@+id/button" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" app:layout_widthPercent="90%"/> </android.support.percent.PercentRelativeLayout>
  15. با سلام دوستان با دوره آموزشی رتروفیت پیشرفته در خدمت شما هستم تو این دوره سعی شده به صورت پیشرفته تر با رتروفیت کار کنیم و از قابلیت هاش به صورت بهینه تر استفاده کنیم یکی از مهمترین قابلیت های این کتابخونه اینه که شما یه کلاس مدل میسازید و رتروفیت به صورت خودکار جیسون هایی که از سرور گرفته رو Parse میکنه و به صورت آبجکت بهتون تحویل میده و این خودش میتونه کلی از کدنویسی هاتون رو کم کنه شما تو این دوره یاد میگیرید که چطور با یه API که آماده هستش کار کنید . مقادیر بهش ارسال کنید و جواب رو بگیرید، فایل آپلود کنید، یاد میگیریم چطور رتروفیت رو با RxJava مخلوط کنیم تا سرعت بیشتر بشه و به صورت مولتی ترد به سادگی کار کنیم . نکته ی مهم : تو این آموزش هیچگونه کدنویسی سمت سروری صورت نمیگیره و فرض رو بر این میذاریم که قبلا نوشته شده . عنوان هر قسمت به ترتیب : 1- آموزش متد گت 2- آموزش متد پست 3- آموزش آپلود عکس 4- آموزش ترکیب رتروفیت و RxJava --------------------------------------------------- آپشن هایی که میتوانید برای ارسال مقادیر به سرور استفاده کنید : @Path : برای جایگذاری مقدار در آدرس ای پی آی API : http://api.com/user/{username} Retrofit : @Path("username") String UserName @Query : برای ارسال مقادیر همراه متد گت API Sample Required : http://api.com/user/feed?123 Retrofit : @Query("feed") int FeedID @Field : برای ارسال مقادیر همراه متد پست @Map : برای ارسال مقادیر مانند هش مپ در اندروید @Part : برای ارسال فایل و مقادیر همراه فایل برای آپلود در سرور @Header : برای ارسال هدر به سرور (اگر نیاز بود) API Required Header : DeviceID , UserAgent there is a two type of declaration : Type 1 : StaticDeclaration Single Header : @Headers("deviceid: 132564") @GET("endpoint") Call<> .... Multi Header : @Headers({ "deviceid: 132564", "useragent: android-retrofitsample }) @GET("endpoint") Call<> .... Type 2 : DynamicDeclaration @GET("endpoint") Call<ResponseBody> sampleRequst(@Header("useragent") String UserAgent, @Header("deviceid") String DeviceID); --------------------------------------------------- آموزش ها به ترتیب در چند روز آینده اضافه میشه ... اگر آموزش دیگه ای به ذهنم رسید به لیست اضافه میکنم اگر آموزشی در رابطه با کتابخانه ی رتروفیت خواستید تو همین تاپیک یا پ.خ عنوان کنید تا در آینده به تاپیک اضافه ش کنم . موفق باشید