انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ریفرش کردن لیست ویو بر اساس یک زمان مشخص یا با دکمه

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

#1
درود بر همه دوستان من تازه عضو انجمن کلیدستان شدم...
یک مشکل کوچیک دارم... من یک لیست ویو دارم که داده های اون از نوع JSON هست که از سرور میگیرم و الان میخام یه دونه Pull To Refresh داشته باشم که وقتی کاربر صفحه رو از بالا به پایین کشید ریفرش بشه و داده های جدید رو بگیره 
و یا اینکه هر چن دقیقه خودش بره داده های جدید رو بگیره 
ممنون میشم راهنماییم کنید 
کدها رو این پایین پیوست میکنم هر دوستی کمک کنه ممنون میشم
من کل کلاس رو پیوست کردم تا فهمیدنش آسونتر باشه 
کد:
package naqibshayea.afghanbazaar;

import android.Manifest;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class welcome extends BaseActivity {
   TextView loading;
   ProgressBar progressBar;
   private boolean goNext = false;
   private int current_page = 0;
   private List<HashMap<String, Object>> all_ads = new ArrayList<>();
   private ListView lv;
   private List<HashMap<String, Object>> all_city;
   private SharedPreferences sp;
   private final String SP_KEY = "my_sp";
   private final String SP_LBL_UNAME = "username";
   private final String SP_LBL_UPASS = "password";
   private final String url_cat = "http://afghanamlaak.com/bazaar/get_cat.php";
   private String url_ads = "http://afghanamlaak.com/bazaar/get_data.php?page=";
   private final String url_ads_by_cat = "http://afghanamlaak.com/bazaar/get_data_by_cat.php?cat=";
   private final String url_insert_ads = "http://afghanamlaak.com/bazaar/set_data.php";
   private final String url_ads_by_city = "http://afghanamlaak.com/bazaar/get_data_by_city.php?cat=";
   private final String url_city = "http://afghanamlaak.com/bazaar/get_city.php";
   private Toolbar my_toolbar;
   private NewArrayAdapter adp;
   private List<HashMap<String, Object>> all_cat;
   public boolean isConnected() {
       ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

       NetworkInfo[] ni = cm.getAllNetworkInfo();

       for (int i = 0; i < ni.length; i++) {
           if (ni[i].getState() == NetworkInfo.State.CONNECTED) {
               return true;
           }
       }

       return false;
   }

   @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
   @Override
   protected void onCreate(Bundle savedInstanceState) {

       if (isConnected() == false) {
           AlertDialog.Builder alert = new AlertDialog.Builder(welcome.this);
           alert.setCancelable(false);
           alert.setTitle(R.string.internet_error_title);
           alert.setMessage(R.string.internet_error_message);
           alert.setPositiveButton(R.string.btn_exit,
                   new DialogInterface.OnClickListener() {
                       @Override
                       public void onClick(DialogInterface dialog, int which) {
                           System.exit(0);
                       }
                   }
           );
           alert.create();
           alert.show();
       }

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_welcome);

       getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

       my_toolbar = (Toolbar) findViewById(R.id.app_bar);
       setSupportActionBar(my_toolbar);

       getSupportActionBar().setDisplayShowHomeEnabled(true);

       navigation_drawer myNav = (navigation_drawer) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);

       myNav.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.welcome_layout), my_toolbar);
       /*----------------------------------------------- ads Class ---------------------------------------------------------*/
       RecyclerView recyclerView = (RecyclerView) findViewById(R.id.myRView);

       RecyclerViewDataObject[] items = getMyItems();

       recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

       recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getResources()));

       RecyclerViewAdapter mAdapter = new RecyclerViewAdapter( items , this );

       recyclerView.setAdapter(mAdapter);

       recyclerView.setItemAnimator(new DefaultItemAnimator());


       recyclerView.addOnItemTouchListener(
               new RecyclerViewAdapter.RecyclerItemClickListener(getApplicationContext(), new RecyclerViewAdapter.RecyclerItemClickListener.OnItemClickListener() {
                   @Override
                   public void onItemClick(View view, int position) {
                       if (position == 0) {
                           startActivity(new Intent(getApplicationContext(), cat_list.class));
                       }
                       if (position == 1) {
                           Intent intent = new Intent(getApplicationContext(), insert_ads.class);

                           intent.putExtra("url", url_insert_ads);

                           String[] id = new String[all_cat.size()];
                           String[] name = new String[all_cat.size()];

                           for (int i = 0; i < all_cat.size(); i++) {
                               id[i] = all_cat.get(i).get("id").toString();
                               name[i] = all_cat.get(i).get("name").toString();
                           }

                           String[] cid = new String[all_city.size()];
                           String[] cname = new String[all_city.size()];

                           for (int i = 0; i < all_city.size(); i++) {
                               cid[i] = all_city.get(i).get("id").toString();
                               cname[i] = all_city.get(i).get("name").toString();
                           }

                           intent.putExtra("cat_id", id);
                           intent.putExtra("cat_name", name);
                           intent.putExtra("city_id", cid);
                           intent.putExtra("city_name", cname);
                           startActivity(intent);
                       }
                       if (position == 2) {
                           finish();
                       }
                       if (position == 3)
                       {
                           startActivity(new Intent(getApplicationContext(), city_list.class));
                       }

                       if (position == 6)
                       {
                           finish();
                       }
                   }
               })
       );
       loading = (TextView) findViewById(R.id.textview_loading_data);
       progressBar = new ProgressBar(this);
       progressBar = (ProgressBar) findViewById(R.id.welcome_progress_bar);
       progressBar.setVisibility(View.GONE);
       progressBar.getIndeterminateDrawable().setColorFilter(
               getResources().getColor(R.color.primaryColor),
               android.graphics.PorterDuff.Mode.SRC_IN);

       make_category_list();
       make_city_list();
       clearCache();

       lv = (ListView) findViewById(R.id.ads_list);

        make_all_ads_list();
        lv.setOnScrollListener(new AbsListView.OnScrollListener() {
           @Override
           public void onScrollStateChanged(AbsListView view, int i) {
               if (i == 1) {

                   if (view.getId() == lv.getId()) {
                       int currentFirstVisibleItem = lv.getFirstVisiblePosition();
                       int mLastFirstVisibleItem = lv.getLastVisiblePosition();

                       if (currentFirstVisibleItem > mLastFirstVisibleItem) {
                       } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
                           // go down
                           if (goNext == true) {
                               goNext = false;
                               make_all_ads_list();

                               progressBar.setVisibility(View.GONE);
                           }
                       }

                   }

               }
           }

           @Override
           public void onScroll(AbsListView absListView, int i, int i1, int i2) {

           }
       });

       lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

               Intent intent = new Intent(getApplicationContext(), show_full_ads.class);
               intent.putExtra("ads", all_ads.get(position));
               startActivity(intent);

           }
       });
   }

   @Override
   protected String[] getRequiredPermissions() {
       return new String[] {
               Manifest.permission.READ_EXTERNAL_STORAGE,
               Manifest.permission.WRITE_EXTERNAL_STORAGE
       };
   }

   @Override
   protected void onAllRequiredPermissionsGranted() {
       StringBuilder sb = new StringBuilder();

       for (String permission : getRequiredPermissions()) {
           sb.append(permission).append("\n");
       }
   }

   public void make_ads_list_by_city()
   {
       try
       {

           DownloadTask dl = new DownloadTask();

           dl.execute(url_ads );

       }
       catch (Exception e)
       {
           Log.i("NaqibMessage" , "error in ads Class in method make_ads_list_by_city -> " + e.toString());
       }
   }

   public RecyclerViewDataObject[] getMyItems()
   {
       RecyclerViewDataObject[] items = {
               new RecyclerViewDataObject("دسته بندیها" , R.drawable.category) ,
               new RecyclerViewDataObject("آگهی جدید" , R.drawable.share) ,
               new RecyclerViewDataObject("دسته بندی بر اساس شهر" , R.drawable.category) ,
               new RecyclerViewDataObject("شرایط درج آگهی" , R.drawable.cond) ,
               new RecyclerViewDataObject("درباره ما" , R.drawable.info ) ,
               new RecyclerViewDataObject("تماس با ما" , R.drawable.contact ) ,
               new RecyclerViewDataObject("خروج" , R.drawable.logout ) ,
       };

       return items;
   }


   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.menu_welcome, menu);
       return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {

       int id = item.getItemId();

       return super.onOptionsItemSelected(item);
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
   }

   public void make_all_ads_list() {
       try
       {

           DownloadTask dl = new DownloadTask();

           dl.execute(url_ads + current_page);

           current_page++;
       }
       catch (Exception e)
       {
           Log.i("NaqibMessage", "error in ads Class in method make_all_ads_list -> " + e.toString());
       }
   }


   public void make_ads_list_by_cat()
   {
       try {

           DownloadTask dl = new DownloadTask();

           dl.execute(url_ads);

       } catch (Exception e) {
           Log.i("NaqibMessage", "error in ads Class in method make_ads_list_by_cat -> " + e.toString());
       }
   }



   private class DownloadTask extends AsyncTask<String, Void, String>
   {
       @Override
       protected void onPreExecute() {
           super.onPreExecute();
           progressBar.setVisibility(View.VISIBLE);
       }

       @Override
       protected String doInBackground(String... params) {
           String temp = "";

           try {
               JSONDownloader jd = new JSONDownloader();

               temp = jd.downloadURL(params[0]);
           }
           catch (Exception e)
           {
               Log.i("NaqibMessage", "error in ads Class in DownloadTask -> " + e.toString());
           }
           return (temp);
       }

       @Override
       protected void onPostExecute(String s)
       {
           ListViewLoaderTask loader = new ListViewLoaderTask();
           loader.execute(s);
           loading.setVisibility(View.INVISIBLE);
           progressBar.setVisibility(View.GONE);
       }
   }


   private class ListViewLoaderTask extends AsyncTask<String, Void, NewArrayAdapter>
   {

       @Override
       protected NewArrayAdapter doInBackground(String... params)
       {

           try
           {
               AdsParser parser = new AdsParser();

               if( all_ads.isEmpty() ) {
                   all_ads.addAll(parser.parse(params[0]));

                   adp = new NewArrayAdapter(getBaseContext(), R.layout.ads_list_row, all_ads);
               } else {
                   adp.addAll( parser.parse(params[0]) );
               }
           }
           catch ( Exception e )
           {
               /*
                * Log.i( "NaqibMessage" , "error in ListViewLoaderTask -> " + e.toString() );
                */
           }

           return adp;
       }

       @Override
       protected void onPostExecute(NewArrayAdapter adapter)
       {
           if( lv.getAdapter() == null )
               lv.setAdapter( adapter );
           else
               adp.notifyDataSetChanged();

           for (int i = 0; i < adapter.getCount(); i++) {
               HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(i);

               String imgURL = (String) hm.get("image_path");

               HashMap<String, Object> forDownload = new HashMap<>();

               forDownload.put("image_path", imgURL);
               forDownload.put("position", i);

               ImageDownloaderTask imageDownloader = new ImageDownloaderTask();

               imageDownloader.execute(forDownload);
           }
           goNext = true;
       }
   }

   private class ImageDownloaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>> {
       @Override
       protected HashMap<String, Object> doInBackground(HashMap<String, Object>... params) {
           InputStream myStream;

           String imgURL = (String) params[0].get("image_path");
           int position = (Integer) params[0].get("position");

           try {
               URL url = new URL(imgURL);
               HttpURLConnection connection = (HttpURLConnection) url.openConnection();
               connection.setDoInput(true);
               connection.connect();
               myStream = connection.getInputStream();
               File cacheDirectory = getBaseContext().getCacheDir();
               File temp = new File(cacheDirectory.getPath() + "/image_" + position + "_" + current_page + ".png");
               FileOutputStream outStream = new FileOutputStream(temp);
               Bitmap b = BitmapFactory.decodeStream(myStream);
               b.compress(Bitmap.CompressFormat.PNG, 100, outStream);
               outStream.flush();
               outStream.close();
               HashMap<String, Object> bitmap = new HashMap<>();
               bitmap.put("image", temp.getPath());
               bitmap.put("position", position);
               return (bitmap);
           } catch (Exception e) {
               /*
               Log.i("NaqibMessage" , "error in ads Class in ImageDownloaderTask -> " + e.toString());
               */
           }
           return null;
       }

       @Override
       protected void onPostExecute(HashMap<String, Object> result) {
           String image = (String) result.get("image");
           int position = (Integer) result.get("position");
           HashMap<String, Object> hm = (HashMap<String, Object>) adp.getItem(position);
           hm.put("image", image);
           adp.notifyDataSetChanged();
       }
   }

   public void clearCache() {
       try {
           File[] f = getBaseContext().getCacheDir().listFiles();

           for (File file : f) {
               file.delete();
           }
       } catch (Exception e) {
           Log.i("NaqibMessage", "error in ads Class in ClearCache -> " + e.toString());

       }


   }

   private class DownloadCats extends AsyncTask<String , Void , String>
   {
       @Override
       protected String doInBackground(String... params)
       {
           String data = "";

           try
           {
               JSONDownloader jd = new JSONDownloader();

               data = jd.downloadURL( params[0] );
           }
           catch ( Exception e )
           {
               /*
                * Log.i( "MatiMessage" , "error in DownloadCats -> " + e.toString() );
                */
           }

           return data;
       }
       @Override
       protected void onPostExecute( String json )
       {
           CatParser parser = new CatParser();

           all_cat = parser.parse( json );

           String[] from = {"name", "amount"};

           int[] to = {R.id.name_cat, R.id.amount_cat};

           SimpleAdapter myAdapter = new SimpleAdapter(getBaseContext(), all_cat ,R.layout.cat_list_row, from, to);

       }
   }

   public void make_category_list()
   {
       DownloadCats dl_cat = new DownloadCats();

       dl_cat.execute(url_cat);
   }


   private class DownloadCity extends AsyncTask<String , Void , String>
   {
       @Override
       protected String doInBackground(String... params)
       {
           String data = "";

           try
           {
               JSONDownloader jd = new JSONDownloader();

               data = jd.downloadURL( params[0] );
           }
           catch ( Exception e )
           {
           }

           return data;
       }
       @Override
       protected void onPostExecute( String json )
       {
           CityParser parser = new CityParser();

           all_city = parser.parse( json );

           String[] from = {"name", "amount"};

           int[] to = {R.id.name_city, R.id.amount_city};

           SimpleAdapter myAdapter = new SimpleAdapter(getBaseContext(), all_city ,R.layout.city_list_row, from, to);

       }
   }

   public void make_city_list()
   {
       DownloadCity dl_city = new DownloadCity();

       dl_city.execute(url_city);
   }
}

   /*
   public void onBtnAboutMeClick(View v)
   {
       alert_me(getString(R.string.alert_about_title), getString(R.string.alert_about_body), true);
   }

   public void onBtnContactMeClick(View v)
   {
       alert_me(getString(R.string.alert_contact_title) , getString(R.string.alert_contact_body) , true);
   }


   public void alert_me(String title , String body , boolean cancelable)
   {
       AlertDialog.Builder alert = new AlertDialog.Builder(welcome.this);
       alert.setCancelable(cancelable);
       alert.setTitle(title);
       alert.setMessage(body);
       alert.show();
   }

   --------------------------------------------------------------------------------------------------------*/
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان