mardi 26 avril 2016

How to trigger a syncadapter with stub contentprovider and stub authenticator?

Am trying to run a syncadapter with stubcontent provider and stub authenticator inside onsync method am making android volley network in that fetching the data from server and saving it in sqlitehelper class and need to display that data in recyclerview in activity here let me post my code:

This is the syncadapter class:

public class Sync extends AbstractThreadedSyncAdapter {
    Account_SF_DB  account_sf_db;
    static String stream = null;
    public static final int SYNC_INTERVAL = 60 * 180;
    public static final int SYNC_FLEXTIME = SYNC_INTERVAL/3;
    ContentResolver mcontentresolver;
    public Sync(Context context, boolean autoInitialize) {
        super(context, autoInitialize);
        mcontentresolver=context.getContentResolver();
    }
    public Sync(
            Context context,
            boolean autoInitialize,
            boolean allowParallelSyncs) {
        super(context, autoInitialize, allowParallelSyncs);
        /*
         * If your app uses a content resolver, get an instance of it
         * from the incoming Context
         */
        mcontentresolver = context.getContentResolver();

    }
    @Override
    public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
       // RequestQueue queue = Volley.newRequestQueue(getContext());




        RequestQueue queue = Volley.newRequestQueue(getContext());

        account_sf_db=new Account_SF_DB(getContext());
        JsonObjectRequest jsonObjRequest = new JsonObjectRequest(Request.Method.GET,"http://ss/ss" , new JSONObject(),
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        String server_response = response.toString();
                        try {
                            Model_Account modelobjs = new Model_Account();
                            JSONObject json_object = new JSONObject(server_response);
                            JSONArray json_array = new JSONArray(json_object.getString("AccountPageLoadAccountListResult"));for (int i = 0; i < json_array.length(); i++) {

                                JSONObject json_arrayJSONObject = json_array.getJSONObject(i);
                                modelobjs.setCompany_group(json_arrayJSONObject.getString("CompanyGroup"));
                                modelobjs.setParent_company(json_arrayJSONObject.getString("CompanyName"));
                                modelobjs.setState(json_arrayJSONObject.getString("Region"));
                                modelobjs.setAccountID(json_arrayJSONObject.getInt("AccountID"));
                                modelobjs.setCompany_name(json_arrayJSONObject.getString("CompanyName"));
                                account_sf_db.InsertorUpdate(modelobjs);
                                Log.d("yog", "sync");

                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getContext(), error.toString(), Toast.LENGTH_SHORT).show();

                    }
                });
        queue.add(jsonObjRequest);
         }

This is my activity code:

package precision.servicefirst;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.LoaderManager;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.SearchView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class Accounts extends AppCompatActivity implements android.widget.SearchView.OnQueryTextListener,LoaderManager.LoaderCallbacks<Cursor> {
    SearchView searchView;

    Account_SF_DB account_sf_db;
    Model_Account model_account;
    AccountListAdapter accountListAdapter;
    public static final long SECONDS_PER_MINUTE = 60L;
    public static final long SYNC_INTERVAL_IN_MINUTES = 60L;
    public static final long SYNC_INTERVAL =
            SYNC_INTERVAL_IN_MINUTES *
                    SECONDS_PER_MINUTE;
    String str_tosever;
    String mCurFilter;
    ProgressDialog Dialog_acc;
    public static final String ACCOUNT = "default_account";

    ContentResolver mcontentresolver;
    private static final int LOADER_SEARCH_RESULTS = 1;
    RecyclerView recyclerView;
   Cursor c;

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_accounts);
        this.runOnUiThread(new Runnable() {
            @Override
            public void run() {


                Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
                setSupportActionBar(toolbar);
                recyclerView = (RecyclerView) findViewById(R.id.recyclerview_activity);
                getSupportActionBar().setDisplayShowHomeEnabled(true);
                toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
                toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
                        startActivity(intent);
                    }
                });


                FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
                fab.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(getBaseContext(), Create_Account.class);
                        startActivity(intent);
                    }
                });

                //spinner-state
                account_sf_db = new Account_SF_DB(getBaseContext());





            }
        });

   //     mcontentresolver=getContentResolver();
           //    AccountManager accountManager = (AccountManager) context.getSystemService(ACCOUNT_SERVICE);
      //  ContentResolver.addPeriodicSync(dummyAccount,ContentProviders.AUTHORITY,Bundle.EMPTY,SYNC_INTERVAL);
        getLoaderManager().initLoader(LOADER_SEARCH_RESULTS, null, this);

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

        MenuItem item = menu.add("Search");
        item.setIcon(R.drawable.abc_ic_search_api_mtrl_alpha);
        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        SearchView searchView = new SearchView(Accounts.this);
        searchView.setOnQueryTextListener(this);
        item.setActionView(searchView);

         return true;
    }
    @Override
    public boolean onQueryTextChange(String newText) {
        mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
        getLoaderManager().restartLoader(0, null, this);
        return false;
    }
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {

        Dialog_acc = new ProgressDialog(Accounts.this);
        Dialog_acc.setMessage("Loading");
        Dialog_acc.show();
        return new CursorLoader(getApplicationContext(), Account_SF_DB.DB_TABLE_ACCOUNTS_URI,null,mCurFilter, null, null) {

            private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver();

            @Override
            public Cursor loadInBackground() {

                if (mCurFilter != null) {
                    c = account_sf_db.lists(mCurFilter);
                } else {
                    c = account_sf_db.list();
                    if (c != null) {
                        c.getCount();
                        c.registerContentObserver(mObserver);
                        c.setNotificationUri(getContext().getContentResolver(), getUri());

                    }
                }        return c;
                }


        };

    }


    @Override
    public void onLoadFinished(Loader<Cursor> loader, final  Cursor data) {
        this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Dialog_acc.hide();
                LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
                layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
                recyclerView.setLayoutManager(layoutManager);
                accountListAdapter = new AccountListAdapter(getBaseContext(), data);
                recyclerView.setAdapter(accountListAdapter);
                accountListAdapter.setOnItemClickListener(new AccountListAdapter.OnItemClickListener() {
                    @Override
                    public void onItemClicked(Cursor cursor) {
                        Integer id = cursor.getInt(cursor.getColumnIndex(Model_Account.id));
                        Log.e("ID", id.toString());
                        Bundle bundle = new Bundle();
                        bundle.putInt("ID", id);
                        Intent intent = new Intent(getApplicationContext(), DetailAccount.class);
                        intent.putExtras(bundle);
                        startActivity(intent);
                    }
                });
                Button btn_syn = (Button) findViewById(R.id.btn_sync);
                btn_syn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String str_toservers = To_server();
                        new Account_async().execute(str_toservers);
                      String Url = "xxxxx";
                       new AccountList().execute(Url);
       ///Here am making my syncadapter call how to trigger it 
                        Bundle settingsBundle = new Bundle();
                        settingsBundle.putBoolean(
                                ContentResolver.SYNC_EXTRAS_MANUAL, true);
                        settingsBundle.putBoolean(
                                ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
        /*
         * Request the sync for the default account, authority, and
         * manual sync settings
         */

                        Account dummyAccount = new Account("dummyaccount", "precision.servicefirst.AccountAuthenticator");
                        ContentResolver.requestSync(dummyAccount, ContentProviders.AUTHORITY, settingsBundle);


                    }
                });
            }
        });

    }


    @Override
    public void onLoaderReset(Loader<Cursor> loader) {

        accountListAdapter.swapCursor(null);

    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }




    public class AccountList extends AsyncTask<String, Void, Void> {
        ProgressDialog Dialog = new ProgressDialog(Accounts.this);

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Dialog.setMessage("Syncing Please Wait");
            Dialog.show();

        }


        @Override
        protected Void doInBackground(String... params) {
            RequestQueue queue = Volley.newRequestQueue(getBaseContext());


            JsonObjectRequest jsonObjRequest = new JsonObjectRequest(Request.Method.GET, params[0], new JSONObject(),
                    new Response.Listener<JSONObject>() {

                        @Override
                        public void onResponse(JSONObject response) {
                            String server_response = response.toString();
                            try {
                                Model_Account modelobjs = new Model_Account();
                                JSONObject json_object = new JSONObject(server_response);
                                JSONArray json_array = new JSONArray(json_object.getString("AccountPageLoadAccountListResult"));for (int i = 0; i < json_array.length(); i++) {

                                    JSONObject json_arrayJSONObject = json_array.getJSONObject(i);
                                    modelobjs.setCompany_group(json_arrayJSONObject.getString("CompanyGroup"));
                                    modelobjs.setParent_company(json_arrayJSONObject.getString("CompanyName"));
                                    modelobjs.setState(json_arrayJSONObject.getString("Region"));
                                    modelobjs.setAccountID(json_arrayJSONObject.getInt("AccountID"));
                                    modelobjs.setCompany_name(json_arrayJSONObject.getString("CompanyName"));
                                    account_sf_db.InsertorUpdate(modelobjs);
                                    accountListAdapter.addModelClass(modelobjs);

                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_SHORT).show();

                        }
                    });
            queue.add(jsonObjRequest);
            return null;
        }

        @Override
        protected void onPostExecute(Void modleobjs) {
            super.onPostExecute(modleobjs);


            Dialog.hide();

        }
    }


    public class Account_async extends AsyncTask<String, String, String> {
        String JsonResponse = null;

        @Override
        protected String doInBackground(String... params) {
            HttpURLConnection urlConnection = null;
            String JsonDATA = params[0];
            byte[] post = JsonDATA.getBytes();
            int request_post = post.length;
            BufferedReader reader = null;
            try {
                Thread.sleep(2000);
                URL url = new URL("http://sss/sss");
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("POST");
                urlConnection.setRequestProperty("Content-Type", "application/json");
                urlConnection.setRequestProperty("charset", "utf-8");
                urlConnection.setRequestProperty("Content-Length", Integer.toString(request_post));
                urlConnection.setDoOutput(true);
                OutputStreamWriter writer = new OutputStreamWriter(urlConnection.getOutputStream());
                writer.write(JsonDATA);
                writer.close();
                int response = urlConnection.getResponseCode();
                if (response >= 400 && response <= 499) {
                    Log.e("", "HTTPx Response: " + response + " - " + urlConnection.getResponseMessage());
                    InputStream in = new BufferedInputStream(urlConnection.getErrorStream());
                }
                InputStream inputStream = urlConnection.getInputStream();
                StringBuilder buffer = new StringBuilder();
                if (inputStream == null) {
                    return null;
                }
                reader = new BufferedReader(new InputStreamReader(inputStream));
                String inputLine;
                while ((inputLine = reader.readLine()) != null)
                    buffer.append(inputLine + "\n");
                if (buffer.length() == 0) {
                    // Stream was empty. No point in parsing.
                    return null;
                }
                JsonResponse = buffer.toString();
                Log.i("Error", JsonResponse);
                if(JsonResponse.contains("Success")){
                    account_sf_db.delete();
                }
                //send to post execute
                return JsonResponse;


            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final IOException e) {
                        Log.e("", "Error closing stream", e);
                    }
                }
            }
            return null;
        }
    }



    public class spinner_acm extends AsyncTask<String,Void,Void>{
        @Override
        protected Void doInBackground(String... params) {

            RequestQueue queuess = Volley.newRequestQueue(getBaseContext());
            JsonObjectRequest jsonObjRequestss = new JsonObjectRequest(Request.Method.GET, params[0], new JSONObject(),
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            String server_response = response.toString();
                            try {
                                JSONObject json_object = new JSONObject(server_response);
                                JSONArray json_array = new JSONArray(json_object.getString("AccountPageLoadAccountManagerResult"));
                                for (int i = 0; i < json_array.length(); i++) {
                                    Model_Account model_spinner = new Model_Account();
                                    JSONObject json_arrayJSONObject = json_array.getJSONObject(i);
                                    model_spinner.setName(json_arrayJSONObject.getString("EmployeeName"));
                                    model_spinner.setAccountmanager(json_arrayJSONObject.getInt("UserID"));
                                    account_sf_db.InsertOrUpdateACM(model_spinner);


                                }


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("error","");
                        }
                    });

            //Creating request queue

            queuess.add(jsonObjRequestss);

            return null;
        }
    }

public String To_server(){
    this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            List<Model_Account> listobjs = new ArrayList<Model_Account>();
            listobjs = account_sf_db.toServer();
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            JsonArray myCustomArray = gson.toJsonTree(listobjs).getAsJsonArray();
            JsonObject jsonObject = new JsonObject();
            jsonObject.add("modelaccount", myCustomArray);
            str_tosever = jsonObject.toString();
        }
    });



    return str_tosever;

}


    public class spinner_indus extends AsyncTask<String,Void,Void>{
        @Override
        protected Void doInBackground(String... params) {
            RequestQueue queue_indus = Volley.newRequestQueue(getBaseContext());
            JsonObjectRequest jsonObjRequest_indus = new JsonObjectRequest(Request.Method.GET, params[0], new JSONObject(),
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            String server_response = response.toString();
                            try {
                                JSONObject json_object = new JSONObject(server_response);
                                JSONArray json_array = new JSONArray(json_object.getString("AccountPageLoadIndustryResult"));
                                for (int i = 0; i < json_array.length(); i++) {
                                    Model_Account model_spinner = new Model_Account();
                                    JSONObject json_arrayJSONObject = json_array.getJSONObject(i);
                                    model_spinner.setName(json_arrayJSONObject.getString("Name"));
                                    model_spinner.setIndustryid(json_arrayJSONObject.getInt("PairID"));
                                    account_sf_db.IndustryInsertorUpdate(model_spinner);

                                }


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("error","");
                        }
                    });

            //Creating request queue

            queue_indus.add(jsonObjRequest_indus);
            return null;
        }
    }
    public class spinner_region extends AsyncTask<String,Void,Void>{
        @Override
        protected Void doInBackground(String... params) {

            RequestQueue queue_region = Volley.newRequestQueue(getBaseContext());
            JsonObjectRequest jsonObjRequest_region = new JsonObjectRequest(Request.Method.GET, params[0], new JSONObject(),
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            String server_response = response.toString();
                            try {
                                JSONObject json_object = new JSONObject(server_response);
                                JSONArray json_array = new JSONArray(json_object.getString("AccountPageLoadRegionResult"));
                                for (int i = 0; i < json_array.length(); i++) {
                                    Model_Account model_spinner = new Model_Account();
                                    JSONObject json_arrayJSONObject = json_array.getJSONObject(i);
                                    model_spinner.setName(json_arrayJSONObject.getString("Name"));
                                    model_spinner.setRegionID(json_arrayJSONObject.getInt("PairID"));
                                    account_sf_db.RegionInsertorUpdate(model_spinner);
                                }


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("error", "");
                        }
                    });

            //Creating request queue

            queue_region.add(jsonObjRequest_region);
            return null;
        }
    }

    private Account createDummyAccount(Context context) {
        Account dummyAccount = new Account("dummyaccount", "precision.servicefirst.AccountAuthenticator");
        AccountManager accountManager = (AccountManager) context.getSystemService(ACCOUNT_SERVICE);
        accountManager.addAccountExplicitly(dummyAccount, null, null);
        ContentResolver.setSyncAutomatically(dummyAccount, ContentProviders.AUTHORITY, true);
        return dummyAccount;
    }}

Here in onclick i need sync how can i trigger it its not firing at all my onsyncperform method is not working

Aucun commentaire:

Enregistrer un commentaire