Sunday, 17 July 2016

Google Autocomplete Places api Example


Hi here i'm giving you simple example about autocomplete, if you want you can try other from referring google api site. Just follow few steps. Hope this help you to understand and do your work easily

Step 1.
In you Activity you need to use edit text as text changed listener, then call places api


        et_Search.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

                    placesTask = new PlacesTask();
                    String[] toPass = new String[2];
                    toPass[0] = s.toString();
                    placesTask.execute(toPass);

            }
        });

Step 2.
 here is calling for google places api

// Fetches all places from GooglePlaces AutoComplete Web Service
    private class PlacesTask extends AsyncTask<String, Void, String> {

        private String val = "";
        @Override
        protected String doInBackground(String... place) {
            // For storing data from web service
            String data = "";

            // Obtain browser key from https://code.google.com/apis/console
            String key = "key="+getResources().getString(R.string.google_server_key);

            String input="";

            try {
                input = "input=" + URLEncoder.encode(place[0], "utf-8");
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }

            String parameters = input+"&"+key + "&components=country:in";
            // Output format +gpsTracker.getLatitude() + "," + gpsTracker.getLongitude() + "&radius=20000
            String output = "json";

            // Building the url to the web service
            String url = "https://maps.googleapis.com/maps/api/place/autocomplete/"+output+"?"+parameters;

            try{
                // Fetching the data from we service
                data = Webservices.ApiCallGet(url);
            }catch(Exception e){
                Log.d("Background Task", e.toString());
            }
            return data;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            // Creating ParserTask
            parserTask = new ParserTask();

            String[] strData = new String[2];
            strData[0] = result;
            // Starting Parsing the JSON string returned by Web Service
            parserTask.execute(strData);
        }
    }

Step 3. Getting Result

    /** A class to parse the Google Places in JSON format */
    private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String,String>>>{

        JSONObject jObject;

        @Override
        protected List<HashMap<String, String>> doInBackground(String... jsonData) {

            List<HashMap<String, String>> places = null;

            PlaceJSONParser placeJsonParser = new PlaceJSONParser();


            try{
                jObject = new JSONObject(jsonData[0]);

                // Getting the parsed data as a List construct
                places = placeJsonParser.parse(jObject);

            }catch(Exception e){
                Log.d("Exception",e.toString());
            }
            return places;
        }

        @Override
        protected void onPostExecute(List<HashMap<String, String>> result) {

            String[] from = new String[] { "description"};
            int[] to = new int[] { android.R.id.text1 };
                AutoCompleteAdapter adapter = new AutoCompleteAdapter(getBaseContext(), result);

                // Setting the adapter
                if(adapter != null && result != null )
                    lv_SearchList.setAdapter(adapter);

        }
    }

    // Fetches  latitude & longitude from place id
    private class LatLongTask extends AsyncTask<Void, Void, String> {

        private HashMap<String, String> placeMap;
        private ProgressDialog dialog;

        public LatLongTask(HashMap<String, String> placeMap){
            this.placeMap = placeMap;
        }


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = ProgressDialog.show(SearchActivity.this, "", "Please Wait...",
                    true, false);
        }

        @Override
        protected String doInBackground(Void... place) {
            // For storing data from web service
            String data = "";

            // Obtain browser key from https://code.google.com/apis/console
            String key = "key="+getResources().getString(R.string.google_server_key);

            String input="";

            try {
                input = "placeid=" + URLEncoder.encode(placeMap.get("place_id"), "utf-8");
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }

            // Building the parameters to the web service
            String parameters = input+"&"+key ;

            // Output format
            String output = "json";

            // Building the url to the web service
            String url = "https://maps.googleapis.com/maps/api/place/details/"+output+"?"+parameters;

            try{
                // Fetching the data from we service
                data = Webservices.ApiCallGet(url);
            }catch(Exception e){
                Log.d("Background Task", e.toString());
            }
            return data;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if(dialog!= null && dialog.isShowing()){
                dialog.dismiss();
            }

            try {
                JSONObject jResult = new JSONObject(result);
                if(jResult.getString("status").equals("OK")) {
                    JSONObject jsonObject = jResult.getJSONObject("result");
                    JSONObject jGeometry = jsonObject.getJSONObject("geometry");
                    JSONObject jLocation = jGeometry.getJSONObject("location");
                    placeMap.put("lat", ""+jLocation.getString("lat"));
                    placeMap.put("lng", ""+jLocation.getString("lng"));
                    ArrayList<HashMap<String, String>> mapArrayList = new ArrayList<HashMap<String, String>>();
                    mapArrayList.add(placeMap);
                    Intent intent = new Intent();
                    intent.putExtra("result",  mapArrayList);
                    if (getParent() == null) {
                        setResult(Activity.RESULT_OK, intent);
                    } else {
                        getParent().setResult(Activity.RESULT_OK, intent);
                    }
                    finish();
                }else{
                    Utils.toastmessage(SearchActivity.this, "Please try again later.");
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    }


Step 4. create this class


public class PlaceJSONParser {

    /** Receives a JSONObject and returns a list */
    public List<HashMap<String,String>> parse(JSONObject jObject){

        JSONArray jPlaces = null;
        try {
            /** Retrieves all the elements in the 'places' array */
            jPlaces = jObject.getJSONArray("predictions");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        /** Invoking getPlaces with the array of json object
         * where each json object represent a place
         */
        return getPlaces(jPlaces);
    }

    private List<HashMap<String, String>> getPlaces(JSONArray jPlaces){
        int placesCount = jPlaces.length();
        List<HashMap<String, String>> placesList = new ArrayList<HashMap<String,String>>();
        HashMap<String, String> place = null;

        /** Taking each place, parses and adds to list object */
        for(int i=0; i<placesCount;i++){
            try {
                /** Call getPlace with place JSON object to parse the place */
                place = getPlace((JSONObject)jPlaces.get(i));
                placesList.add(place);

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

        return placesList;
    }

    /** Parsing the Place JSON object */
    private HashMap<String, String> getPlace(JSONObject jPlace){

        HashMap<String, String> place = new HashMap<String, String>();

        String id="";
        String reference="";
        String description="";
        String place_id = "";

        try {

            description = jPlace.getString("description");
            id = jPlace.getString("id");
            reference = jPlace.getString("reference");
            place_id = jPlace.getString("place_id");

            place.put("description", description);
            place.put("_id",id);
            place.put("reference",reference);
            place.put("place_id", place_id);

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


}

Saturday, 7 May 2016

Android apis Calling through Retrofit

Hi guys,

Today i'll show you how to use RetroFit for calling any apis.

Follow some belew step and get it done in easy way.

Step 1.

Compile these  libraries from gradle

    compile 'com.squareup.okhttp:okhttp:2.4.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
    compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

Step 2.

Create Interface for calling apis like below

public interface Api {

    // Added server url here, and pass reference of model class, model class you can generate by GSON or manually.

    @POST("/*******/loginapi")
    Call<LoginModal> loginapi(@Body JsonObject data);
}

Step 3.

  Third step to write code on replacement of AsyncTask, calling api

   private void LoginService(JsonObject jsonPostParameters) {
        //While the app fetched data we are displaying a progress dialog

        final ProgressDialog loading = ProgressDialog.show(activity, "", "Please wait...", false, false);

        OkHttpClient okHttpClient1 = new com.squareup.okhttp.OkHttpClient();
        okHttpClient1.setReadTimeout(Common.api_timeinterval, TimeUnit.SECONDS);
        okHttpClient1.setConnectTimeout(Common.api_timeinterval, TimeUnit.SECONDS);

// Pass server base url, i:e www.yoursiteurl.com
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(SERVER_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient1)
                .build();

        Api serviceApi = retrofit.create(Api.class);
        // Call<Register> updateUser(@Query("name") String name, @Query("password") String password,@Query("email")String email,@Query("Country") String Country  ,@Query("latitude") String latitude ,@Query("longitude") String longiTude  , @Query("device_token") String device_token );

        serviceApi.loginapi(jsonPostParameters).enqueue(new Callback<LoginModal>() {
            @Override
            public void onResponse(Response<LoginModal> response, Retrofit retrofit) {
                LoginModal loginmodal = response.body();
                loading.dismiss();

                if (loginmodal.getResponse().getResult() == 1) {

// Here you get reponse from model class
 
                } else {
                    Common.showDialogActionLess("Login unsuccessfull !", loginmodal.getResponse().getErrorMSG(),
                            activity);
                }

            }

            @Override
            public void onFailure(Throwable e) {
                loading.dismiss();
                if (e instanceof HttpRetryException) {
                    HttpRetryException response = (HttpRetryException) e;
                }

                Toast.makeText(activity, "Please try again later.", Toast.LENGTH_LONG).show();
                finish();

            }
        });

    }


Step 4.

If you want then take reference from model class :

public class LoginModal {
 
    private ResponseEntity Response;

    public void setResponse(ResponseEntity Response) {
        this.Response = Response;
    }

    public ResponseEntity getResponse() {
        return Response;
    }

    public static class ResponseEntity {
        private int result;
        private String resultText;
        private String errorMSG;
        private int user_id;
 
        public void setResult(int result) {
            this.result = result;
        }

        public void setResultText(String resultText) {
            this.resultText = resultText;
        }

        public void setErrorMSG(String errorMSG) {
            this.errorMSG = errorMSG;
        }

        public void setUser_id(int user_id) {
            this.user_id = user_id;
        }

        public int getResult() {
            return result;
        }

        public String getResultText() {
            return resultText;
        }

        public String getErrorMSG() {
            return errorMSG;
        }
    }
}


Step 5.

Atlast create json or anyformat you want to send to server and call api method.


                    JsonObject jsonObject = new JsonObject();
                    try {
                        jsonObject.addProperty("username", "abc");
                        jsonObject.addProperty("password", "xyz");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    LoginService(jsonObject);



That's all this is the easy and frequent way to call apis from RetroFit.Hopefully somebody will help from this. :)

Saturday, 27 February 2016

XMPP Sample for android

Hi guys,
I have made one sample for xmpp. Its Extensible Messaging and Presence Protocol(XMPP)  is a  communication protocol for messge-oriented middleware based on XML(Extensible Markup Language).

You need to follow few steps and you get it done in very simple way.

Step 1. If you are try in locally then you have to install wamp or lamp or xampp server. After this start the server apache and mysql. Now you have import openfire database in mysql.

Step 2. Install openfire in your system.If you are trying in local  otherwise you can install openfire in your server.

Step 3. Go to below link of github to download my sample for xmpp.

https://github.com/saveendhiman/XMPPSample_Studio

https://github.com/saveendhiman/XMPPSample-Eclipse

If you want to download apk then you can visit direct in play store link

https://play.google.com/store/apps/details?id=com.cool.xmppsample

Also checkout the video from here,

https://www.youtube.com/watch?v=OrL9mepFLQU

Step 4. Enter any id for your xmpp user and you should enter your correct server name and host name from your openfire server.Now enter your opposite user id and then press in online or in android icon.
Chat screen opened.

★★Features have a look at our app Provided you★★

Everything is dynamic. You have to enter ip address of your server where openfire is installed.

Features summary:
- Free!
- Run an XMPP Server
- Use the built-in certificate or use your own for SSL/TLS
- Set users
- Add a Dynamic DNS Updater using the local or public IP of your device
- Enable modules: One to one  chat, database, notification and user is online till you want(background

service).


★★Features★★

* One to one communication.
* Emojis.
* Database handling.
* Notification handling.
* Background service you user is online till you want.
* Typing status.
* Online users
* Duration of online users.
* Avatar from roster.

and many more features provided by us.