menusearch
javapro.ir

جلسه هفدهم | ساخت برنامه شبیه به اینستاگرام | نمایش لیست ها

جستجو
شنبه ۶ مرداد ۱۴۰۳ | ۱۰:۲۳:۵
۱۳۹۹/۳/۶ سه شنبه
(3)
(0)
جلسه هفدهم | ساخت برنامه شبیه به اینستاگرام | نمایش لیست ها
جلسه هفدهم | ساخت برنامه شبیه به اینستاگرام | نمایش لیست ها

به نام خدا


سلام و عرض ادب خدمت شما همه کاربران عزیز سایت جاواپرو
امیدوارم هرکجا که هستید حالتون خوب و ایام به کامتون باشه
با جلسه هفدهم از دوره آموزشی ساخت اینستاگرام در خدمت شما عزیزان هستیم
در این جلسه ما میخوایم لیست پست ها را درون اپلیکیشنمون نشون بدیم
پس با ما همراه باشید

 


قبل از شروع این جلسه یک نکته رو بررسی کنیم


ما در جلسه قبل فراموش کردیم برای پروفایل کاربر هم یک فیلد در دیتابیس تعریف کنیم
پس سرور مجازی رو راه اندازی میکنیم و به ادرس localhost/phpmyadmin میریم
به دیتابیسمون میریم و پس اون به جدول post میریم

آموزش پروژه محور اندروید ساخت برنامه ای شبیه به اینستاگرام


به سربرگ structure میریم و مطابق تصویر یک میگیم یک ستون پس از caption اضافه کن و go رو میزنیم

دوره آموزش پروژه محور ساخت برنامه ای شبیه به اینستاگرام

 

مطابق تصویر 2 اسمش رو میذاریم profile از نوع text باشه و مقدار پیش فرض یا همون default هم میذاریم null باشه و
بعد از اون روی save کلیک میکنیم تا اضافه بشه.


برمیگردیم به بحث اصلیمون
بنده کلیات کار رو عرض کنم همین ابتدا تا بعد پیاده سازی دقیق برسیم.
کلیات به این شکل هست که ما باید در سمت کلاینت یک درخواست بدیم و هرچی که توی دیتابیس و جدول post هست رو دریافت کنیم و توی برنامه نشونش بدیم
به همین سادگی!

پروژه مون رو باز میکنیم کتابخونه پیکاسو لازم داریم برای دانلود عکس ها اونو به این شکل در build.gradle(module:app) اضافه میکنیم و بعد از اطمینان از روشن بودن تحریم شکن پروژه رو سینک میکنیم که به پروژه اضافه بشه:

 

implementation 'com.squareup.picasso:picasso:+'

کتابخانه 1


حالا یه کلاس جدید میسازیم به اسم PostProperty و به ازای هر ستون توی دیتابیس یک متغیر توی
کلاسمون تعریف میکنیم و سازنده و getter, setter برای هرکدومشون تعریف میکنیم به این شکل:

 

public class PostProperty {

  String id,username,location,image,caption,profile;

  public PostProperty(String id, String username, String location, String image, String caption,String profile) {
      this.id = id;
      this.username = username;
      this.location = location;
      this.image = image;
      this.caption = caption;
      this.profile=profile;
  }

  public String getId() {
      return id;
  }

  public void setId(String id) {
      this.id = id;
  }

  public String getUsername() {
      return username;
  }

  public void setUsername(String username) {
      this.username = username;
  }

  public String getLocation() {
      return location;
  }

  public void setLocation(String location) {
      this.location = location;
  }

  public String getImage() {
      return image;
  }

  public void setImage(String image) {
      this.image = image;
  }

  public String getCaption() {
      return caption;
  }

  public void setCaption(String caption) {
      this.caption = caption;

  }

  public String getProfile() {
      return profile;
  }

  public void setProfile(String profile) {
      this.profile = profile;
  }
}


نمونه کد 1


شاید بپرسید دلیل تعریف این کلاس چی بود؟
اطلاعاتی که از سمت سرور میاد در قالب آرایه ای از json میاد و با استفاده از این کلاس و لیستی که از این کلاس میسازیم اطلاعات رو از json میگیریم و توی این لیست ذخیره میکنیم و لیست رو هم میدیم به recyclerview که بهمون نشون داده بشه.
ابتدا میریم و سمت سرور رو برنامه نویسی میکنیم
یک فایل php جدید توی فولدر Instagram موجود در فولدر htdocs سرور مجازیمون میسازیم به اسم loadpost.php و
با notepad++ سمت سرور رو برنامه نویسی میکنیم.
تگ php رو باز میکنیم و اتصال به دیتابیس رو برقرار میکنیم مطابق جلسات قبل به این شکل:

 

<?php
header("Content-type: application/json");

define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','instagram');
$cnn = mysqli_connect(HOST,USER,PASS,DB);
if (!$cnn) {
die("Connection failed" );
}
?>


نمونه کد 2


حالا که اتصالمون به دیتابیس برقرار شد باید کوئری بنویسیم و هرچی که توی دیتابیسمون هست رو بگیریم به این شکل:

$stmt=$cnn->prepare(" select id, username, location, image, caption, profile from post");
$stmt-> exec ute();
$stmt ->bind_ result ($id, $username, $location ,$image, $caption, $profile);

 

نمونه کد 3


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

 

$post=array();
while($stmt->fetch()){
$temp=array();
$temp['id']=$id;
$temp['username']=$username;
$temp['location']=$location;
$temp['image']=$image;
$temp['caption']=$caption;
$temp['profile']=$profile;
array_push($post,$temp);
}


نمونه کد 4


با نمونه کد 4 ما یک ارایه میسازیم و هرچی که از دیتابیس میاد رو با استفاده از ارایه کمکی درونش میریزیم
حالا وقتشه که این ارایه $post رو به فرمت json بفرستیم به سمت کلاینتمون(کاربرمون)
به این شکل:

 

echo json_encode($post);
mysqli_close($cnn)
;

      
نمونه کد 5

 

 

 

 

آموزش رایگان صفر تا پیشرفته برنامه نویسی اندروید جاواپرو

 

 

 

 

 

 

 

 

 

 

 

 

کد کلی اتصال به سرور:

 

while($stmt->fetch()){
   
   $temp=array();
   $temp['id']=$id;
   $temp['username']=$username;
   $temp['location']=$location;
   $temp['image']=$image;
   $temp['caption']=$caption;
   $temp['profile']=$profile;
   
   array_push($post,$temp);
}
echo json_encode($post);
mysqli_close($cnn);

?>

 


نمونه کد 7

 

حالا میریم سمت اندروید و درخواست میدیم به این فایل php
به HomeFragment میریم و باید اینجا یک متد تعریف کنیم برای درخواست به سرور و همچنین چندین متغیر برای نشون دادن پست ها به کاربرمون.

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

 

RecyclerView recyclerView;
LinearLayoutManager layoutManager;
PostAdapter adapter;
ArrayList<PostProperty> allposts;
RequestQueue queue
;

 

نمونه کد 2


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

 

View view = inflater.inflate(R.layout.fragment_home, container, false);
recyclerView = view.findViewById(R.id.recyclerview);
layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
allposts = new ArrayList<>();
adapter = new PostAdapter(getContext(), allposts);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
queue = Volley.newRequestQueue(getContext());

loadPosts();

return view;


نمونه کد 9


نمونه کد 10 رو ملاحظه بفرمایید یک متد داریم به نام loadPosts() که درخواست به سرور رو انجام میده
پس باید این متد رو تعریف کنیم
بنده تمام کد متد و همچنین درخواست رو میذارم و بعد توضیح میدم خدمتتون:

 

private void loadPosts() {
    StringRequest request = new StringRequest(Request.Method.GET, Server.server_address + "loadpost.php", new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONArray posts = new JSONArray(response);
                for (int i = 0; i < posts.length(); i++) {
                    JSONObject obj = posts.getJSONObject(i);
                    String image = obj.getString("image");
                    String id = obj.getString("id");
                    String caption = obj.getString("caption");
                    String location = obj.getString("location");
                    String username = obj.getString("username");
                    String profile = obj.getString("profile");
                    PostProperty post = new PostProperty(id, username, location, image, caption,profile);
                    allposts.add(post);
                    adapter.notifyDataSetChanged();
                }
            } catch (JSONException e) {
                Toast.makeText(getContext(), e.toString(), Toast.LENGTH_SHORT).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getContext(), error.toString(), Toast.LENGTH_SHORT);
        }
    });
    queue.add(request);


}


نمونه کد 10


ما باز هم به استفاده از volley درخواست میدیم
دلیل اینکه از androidnetworking که ابتدای دوره عرض کردم استفاده نمیکنم اینه که volley بسیار شناخته شده تر است و در پروژه های گروهی شما androidnetworking کمتر به کار می‌اید.
یک درخواست به سرور به وسیله فایل loadpost.php میدیم و پاسخمون رو به صورت json میگیریم و درون یک لیست از نوع PostProperty ذخیره میکنیم و این لیست رو هم که در onCreateView به ریسایکلرویو برای نمایش میدیم.
حالا باید این متد رو در onResume هم صدا بزنیم که که کاربر بین صفحات جابجا شد و دوباره به همین صفحه برگشت هم پست ها نمایش داده بشن.
کلید های ترکیبی ctrl+o رو فشار میدیم و تایپ میکنیم onResume و متد رو override میکنیم و این متد loadpost رو درونش فراخوانی میکنیم به این شکل:

 

@Override
public void onResume() {
  loadPosts();
  super.onResume();
}

 

نمونه کد 11


کد کلی و نهایی HomeFragment به این شکل است:

 

public class HomeFragment extends Fragment {
  RecyclerView recyclerView;
  LinearLayoutManager layoutManager;
  PostAdapter adapter;
  ArrayList<PostProperty> allposts;
  RequestQueue queue;

  public HomeFragment() {

  }

  public static HomeFragment newInstance() {
      HomeFragment fragment = new HomeFragment();
      return fragment;
  }

  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.fragment_home, container, false);
      recyclerView = view.findViewById(R.id.recyclerview);
      layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
      allposts = new ArrayList<>();
      adapter = new PostAdapter(getContext(), allposts);
      recyclerView.setLayoutManager(layoutManager);
      recyclerView.setAdapter(adapter);
      queue = Volley.newRequestQueue(getContext());
      loadPosts();
      return view;
  }

  @Override
  public void onResume() {
      loadPosts();
      super.onResume();
  }

  private void loadPosts() {
      StringRequest request = new StringRequest(Request.Method.GET, Server.server_address + "loadpost.php", new Response.Listener<String>() {
          @Override
          public void onResponse(String response) {
              try {
                  JSONArray posts = new JSONArray(response);
                  for (int i = 0; i < posts.length(); i++) {
                      JSONObject obj = posts.getJSONObject(i);
                      String image = obj.getString("image");
                      String id = obj.getString("id");
                      String caption = obj.getString("caption");
                      String location = obj.getString("location");
                      String username = obj.getString("username");
                      String profile = obj.getString("profile");
                      PostProperty post = new PostProperty(id, username, location, image, caption,profile);
                      allposts.add(post);
                      adapter.notifyDataSetChanged();
                  }
              } catch (JSONException e) {
                  Toast.makeText(getContext(), e.toString(), Toast.LENGTH_SHORT).show();
              }
          }
      }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
              Toast.makeText(getContext(), error.toString(), Toast.LENGTH_SHORT);
          }
      });
      queue.add(request);
  }
}


نمونه کد 12


حالا به کلاس PostAdapter میریم تا اطاعات رو به ریسایکلر ویو ست کنیم.
ابتدا یک لیست از نوع PostProperty میسازیم و در سازنده این لیست رو مقدار دهی میکنیم به این شکل:

 

Context context;
LayoutInflater inflater;
List<PostProperty> allPosts;
public PostAdapter(Context context, List<PostProperty> allPosts) {
  this.context = context;
  inflater = inflater. from (context);
  this.allPosts = allPosts;

}


نمونه کد 13


Context و LayoutInflater در جلسات قبل تعریف شده است و شما فقط List<PostProperty> allPosts; رو تعریف کنید و به سازنده بدین و درون سازنده هم مقدار دهی کنید.
حالا به onBindViewHolder میریم و به این شکل مقدار دهی میکنیم:

 

 

 

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

 

 


ادامه حیات سایت جاواپرو به حمایت مالی (دونیت) از طرف شما کاربر عزیز بستگی دارد....



لینک دانلود آموزش رایگان اندروید

لینک دانلود جلسه هفدهم آموزش ساخت برنامه شبیه به اینستاگرام

 

 

عضویت در کانال تخصصی آموزش جاوا و اندروید در تلگرام

با عضویت در کانال تخصصی برنامه نویسی جاوا و اندروید جاواپرو از ما حمایت کنید

 

 

پیج اینستاگرام سایت جاواپرو

پیج اینستاگرام جاواپرو شامل کلیپ های فان و مقالات برنامه نویسی

نظرات کاربران
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

بستن
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

1 نظر
رامین
شنبه یکم شهریور ۹۹
پاسخ
()
()
رامین
سلام وقت بخير. ممنون از آموزش عاليتون. ادامه اين آموزش رو ميزاريد بازم؟
پاسخ مدیر سایت
سلام.بله
پاسخ مدیر سایت
هدر سایت
مشاهده سرفصل ها و ثبت نام در دوره Spring Boot جاواپرو  [کلیک کنید]
آموزش پروژه محور اسپرینگ بوت(Spring Boot)-سیستم دانشگاه
ثبت نام در دوره آموزش Spring security
دوره پرتاب | آموزش پیش نیازهای برنامه نویسی
دوره آموزش مبانی زبان برنامه نویسی جاوا
دوره آموزش مفاهیم پیشرفته زبان برنامه نویسی جاوا
مقدمه ای از زبان برنامه نویسی جاوا(java)
آموزش زبان برنامه نویسی جاوا
آموزش گرافیک در زبان برنامه نویسی جاوا
آموزش مدیریت چیدمان گرافیکی در زبان جاوا
آموزش ساخت بازی دوبعدی در زبان جاوا
Collection ها در زبان برنامه نویسی جاوا
آموزش پروژه محور ساخت برنامه مدیریت بانک با JavaFX
نمونه پروژه های رایگان زبان جاوا
آموزش دیتابیس در زبان برنامه نویسی جاوا
نمونه مثال پایه ای زبان برنامه نویسی جاوا
نمونه مثال String در زبان برنامه نویسی جاوا
آموزش جامع برنامه نویسی JavaFX
آموزش ساخت برنامه آزمون تستی در JavaFX
آموزش برنامه نویسی سوکت در جاوا
آموزش ساخت برنامه دفترچه تلفن با JavaFX
آموزش ساخت ربات ساده تلگرام با زبان جاوا
آموزش ساخت برنامه ماشین حساب با JavaFX
آموزش ساخت برنامه ساده مدیریت ایمیل ها با JavaFX
دوره آموزش Spring Boot
سفارش انجام پروژه زبان برنامه نویسی جاوا(JAVA)
سفارش انجام پروژه برنامه نویسی متلب(MATLAB) با قیمت منصفانه و تحویل به موقع
سفارش انجام پروژه زبان برنامه نویسی سی شارپ (#C)
سفارش انجام پروژه زبان برنامه نویسی سی(C)
سفارش انجام پروژه زبان برنامه نویسی پایتون(Python)
سفارش انجام پروژه زبان برنامه نویسی PHP (پی اچ پی)
سفارش انجام پروژه زبان برنامه نویسی اسمبلی(Assembly)
سفارش انجام پروژه زبان برنامه نویسی جاوا اسکریپت (Javascript)
سفارش انجام پروژه هوش مصنوعی
سفارش انجام پروژه طراحی الگوریتم
سفارش انجام پروژه ساختمان داده ها
سفارش انجام پروژه مهندسی نرم افزار
سفارش انجام پروژه شبکه های کامپیوتری
سفارش انجام پروژه پایگاه داده: دیتابیس (database)
 سفارش انجام پروژه سیستم عامل
سفارش انجام پروژه پاورپوینت(PowerPoint)
سفارش انجام پروژه اکسل (Excel)
سفارش انجام تحقیق و تهیه مقاله
سوالات متداول برنامه نویسی
جدیدترین مطالب
گفتگو را شروع کنید
مشاوره ،تدریس خصوصی و سفارش انجام انواع پروژه های برنامه نویسی