Thursday 23 March 2017

Autocomplete Google Places API Example

               When a requirement in your application, you want implement Autocomplete Google Places API. A new API was released name as Google Places API . This API gives full access to Google's database for places, for this you have to include Google Play Services in your app.

Screen Shots:




Download Source Code

1. Build Gradle:
            Add the "play-services-places" dependency in your app build.gradle file dependencies and sync library.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.prasad.autocompleteplaceapi"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
    testCompile 'junit:junit:4.12'


    compile 'com.google.android.gms:play-services-places:10.2.1'
    
}

2. XML Layout:
          open activity_main.xml file, modify the below changes.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <AutoCompleteTextView
        android:id="@+id/autoCompleteTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:drawableRight="@drawable/location"
        android:hint="Enter Place Here" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/autoCompleteTextView"
        android:src="@drawable/powered_by_google_light" />

    <TextView
        android:id="@+id/select"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/autoCompleteTextView"
        android:layout_marginTop="20dp"
        android:text="Selected Place:"
        android:textStyle="bold" />


    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/select"
        android:layout_marginTop="20dp" />


</RelativeLayout>

3. Generate Places API key For Android

     1. Create a project in Google Developers Console see the below image.


 
 2. Open API Manager for this click on Menu Icon at top left. and click on Google Places API for
           Android. And click on Enable button to enable API. look at below images.





   3. Then go to the Credentials section and click on Create Credentials.



 
    4. For getting SHA1 fingerprint open CMD prompt change the directory to the JDK bin directory,
         my JDK bin path "C:\Program Files\Java\jdk1.8.0_102\bin". (Could be different for you)  
  
Windows:
cd C:\Program Files\Java\jdk1.7.0_05\bin

    5. Next we have to run the keytool.exe for getting SHA1 fingerprint.Use the below command for             getting SHA1 fingerprint.

 Windows:
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android




   6.  Enter your SHA1 fingerprint with you package name for restrict Android Application and click           save button, see below images.




       
    7. Paste the API key in a meta tag under the application tag in your AndroidManifest.xml as shown         below.

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="{YOUR_API_KEY}"/>

4. Android Manifest
       Open Android Manifest file add the permissions and meta tag under application tag.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.prasad.autocompleteplaceapi">


    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzaSyBqLsXyr7sniC1ATs-E7-AI15U4v_qpkug" />
    </application>

</manifest>

5. MainActivity Class
     Open Main Activity java class and modify the below changes in your java class.


package com.prasad.autocompleteplaceapi;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.PlaceBuffer;
import com.google.android.gms.location.places.Places;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;

public class MainActivity extends AppCompatActivity implements
        GoogleApiClient.OnConnectionFailedListener,
        GoogleApiClient.ConnectionCallbacks {

    private static final String TAG = "MainActivity";
    private static final int GOOGLE_API_CLIENT_ID = 0;
    private AutoCompleteTextView mAutocompleteTextView;
    private TextView mNameView;

    private GoogleApiClient mGoogleApiClient;
    private PlaceArrayAdapter mPlaceArrayAdapter;
    private static final LatLngBounds BOUNDS_MOUNTAIN_VIEW = new LatLngBounds(
            new LatLng(37.398160, -122.180831), new LatLng(37.430610, -121.972090));

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAutocompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
        mAutocompleteTextView.setThreshold(3);
        mNameView = (TextView) findViewById(R.id.name);

        mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
                .addApi(Places.GEO_DATA_API)
                .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
                .addConnectionCallbacks(this)
                .build();

        mAutocompleteTextView.setOnItemClickListener(mAutocompleteClickListener);
        mPlaceArrayAdapter = new PlaceArrayAdapter(this, android.R.layout.simple_list_item_1,
                BOUNDS_MOUNTAIN_VIEW, null);
        mAutocompleteTextView.setAdapter(mPlaceArrayAdapter);

    }

    private AdapterView.OnItemClickListener mAutocompleteClickListener
            = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            final PlaceArrayAdapter.PlaceAutocomplete item = mPlaceArrayAdapter.getItem(position);
            final String placeId = String.valueOf(item.placeId);
            Log.i(TAG, "Selected: " + item.description);
            PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi
                    .getPlaceById(mGoogleApiClient, placeId);
            placeResult.setResultCallback(mUpdatePlaceDetailsCallback);
            Log.i(TAG, "Fetching details for ID: " + item.placeId);
        }
    };

    private ResultCallback<PlaceBuffer> mUpdatePlaceDetailsCallback
            = new ResultCallback<PlaceBuffer>() {
        @Override
        public void onResult(PlaceBuffer places) {
            if (!places.getStatus().isSuccess()) {
                Log.e(TAG, "Place query did not complete. Error: " +
                        places.getStatus().toString());
                return;
            }
            // Selecting the first object buffer.
            final Place place = places.get(0);
            CharSequence attributions = places.getAttributions();

            mNameView.setText(Html.fromHtml(place.getAddress() + ""));


        }
    };

    @Override
    public void onConnected(@Nullable Bundle bundle) {

        mPlaceArrayAdapter.setGoogleApiClient(mGoogleApiClient);
        Log.i(TAG, "Google Places API connected.");

    }

    @Override
    public void onConnectionSuspended(int i) {
        mPlaceArrayAdapter.setGoogleApiClient(null);
        Log.e(TAG, "Google Places API connection suspended.");
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

        Log.e(TAG, "Google Places API connection failed with error code: "
                + connectionResult.getErrorCode());

        Toast.makeText(this,
                "Google Places API connection failed with error code:" +
                        connectionResult.getErrorCode(),
                Toast.LENGTH_LONG).show();

    }
}

6. PlaceArrayAdapter
     Create PlaceArrayAdapter java class and copy the below code.

package com.prasad.autocompleteplaceapi;

import android.content.Context;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.Toast;

import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.places.AutocompleteFilter;
import com.google.android.gms.location.places.AutocompletePrediction;
import com.google.android.gms.location.places.AutocompletePredictionBuffer;
import com.google.android.gms.location.places.Places;
import com.google.android.gms.maps.model.LatLngBounds;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.TimeUnit;

public class PlaceArrayAdapter extends ArrayAdapter<PlaceArrayAdapter.PlaceAutocomplete> implements Filterable {

    private static final String TAG = "PlaceArrayAdapter";
    private GoogleApiClient mGoogleApiClient;
    private AutocompleteFilter mPlaceFilter;
    private LatLngBounds mBounds;
    private ArrayList<PlaceAutocomplete> mResultList;


    public PlaceArrayAdapter(Context context, int resource, LatLngBounds bounds,
                             AutocompleteFilter filter) {
        super(context, resource);
        mBounds = bounds;
        mPlaceFilter = filter;
    }

    public void setGoogleApiClient(GoogleApiClient googleApiClient) {
        if (googleApiClient == null || !googleApiClient.isConnected()) {
            mGoogleApiClient = null;
        } else {
            mGoogleApiClient = googleApiClient;
        }
    }

    @Override
    public int getCount() {
        return mResultList.size();
    }

    @Override
    public PlaceAutocomplete getItem(int position) {
        return mResultList.get(position);
    }


    @Override
    public Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                FilterResults results = new FilterResults();
                if (constraint != null) {
                    mResultList = getPredictions(constraint);

                    if (mResultList != null) {
                        results.values = mResultList;
                        results.count = mResultList.size();
                    }
                }

                return results;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                if (results != null && results.count > 0) {
                    // The API returned at least one result, update the data.
                    notifyDataSetChanged();
                } else {
                    // The API did not return any results, invalidate the data set.
                    notifyDataSetInvalidated();
                }
            }
        };
        return filter;
    }


    private ArrayList<PlaceAutocomplete> getPredictions(CharSequence constraint) {

        if (mGoogleApiClient != null) {

            Log.i(TAG, "Executing autocomplete query for: " + constraint);

            PendingResult<AutocompletePredictionBuffer> results = Places.GeoDataApi
                    .getAutocompletePredictions(mGoogleApiClient, constraint.toString(),
                            mBounds, mPlaceFilter);

            // Wait for predictions, set the timeout.
            AutocompletePredictionBuffer autocompletePredictions = results
                    .await(60, TimeUnit.SECONDS);

            final Status status = autocompletePredictions.getStatus();
            if (!status.isSuccess()) {
                Toast.makeText(getContext(), "Error: " + status.toString(),
                        Toast.LENGTH_SHORT).show();
                Log.e(TAG, "Error getting place predictions: " + status
                        .toString());
                autocompletePredictions.release();
                return null;
            }

            Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
                    + " predictions.");
            Iterator<AutocompletePrediction> iterator = autocompletePredictions.iterator();
            ArrayList resultList = new ArrayList<>(autocompletePredictions.getCount());
            while (iterator.hasNext()) {
                AutocompletePrediction prediction = iterator.next();
                resultList.add(new PlaceAutocomplete(prediction.getPlaceId(),
                        prediction.getFullText(null)));
            }
            // Buffer release
            autocompletePredictions.release();
            return resultList;
        }

        Log.e(TAG, "Google API client is not connected.");
        return null;
    }

    class PlaceAutocomplete {

        public CharSequence placeId;
        public CharSequence description;

        PlaceAutocomplete(CharSequence placeId, CharSequence description) {
            this.placeId = placeId;
            this.description = description;
        }

        @Override
        public String toString() {
            return description.toString();
        }
    }
}

   

83 comments:

  1. Good and complete exsample, nice.

    ReplyDelete
  2. Thanks for this example, works as a charm

    ReplyDelete
  3. didnt work for me! :) i type place name but didnt show anything ?

    ReplyDelete
    Replies
    1. i am facing the same same issue if you found solution please share information.

      Delete
  4. I am getting following error
    API_ACCESS_NOT_CONFIGURED

    ReplyDelete
  5. it works fine, tanx for u help

    ReplyDelete
  6. Great post! I am actually getting ready to across this information, It’s very helpful for this blog.Also great with all of the valuable information you have Keep up the good work you are doing well.

    angularjs Training in chennai

    angularjs-Training in tambaram

    angularjs-Training in sholinganallur

    angularjs-Training in velachery

    angularjs Training in bangalore

    ReplyDelete
  7. Thanks a lot for sharing us about this update. Hope you will not get tired on making posts as informative as this. 

    python training in tambaram | python training in annanagar | python training in jayanagar

    ReplyDelete
  8. Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.

    rpa training in velachery| rpa training in tambaram |rpa training in sholinganallur | rpa training in annanagar| rpa training in kalyannagar

    ReplyDelete
  9. Nice post. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated posts…
    Data Science training in Chennai | Data science training in bangalore

    Data science training in pune | Data science online training

    Data Science Interview questions and answers

    ReplyDelete
  10. I am getting following error
    API_ACCESS_NOT_CONFIGURED. how to solve this error plz help

    ReplyDelete
    Replies
    1. can you find out why this error is occurred??

      Delete
  11. A universal message I suppose, not giving up is the formula for success I think. Some things take longer than others to accomplish, so people must understand that they should have their eyes on the goal, and that should keep them motivated to see it out til the end.
    Microsoft Azure online training
    Selenium online training
    Java online training
    Python online training
    uipath online training

    ReplyDelete
  12. hi sir please give source code

    please

    ReplyDelete
  13. Nice information, valuable and excellent article, lots of great information, thanks for sharing with peoples.


    Data Science Courses Bangalore

    ReplyDelete
  14. This is a wonderful article, Given so much info in it, These type of articles keeps the users interest in the website, and keep on sharing more ... good luck.
    ExcelR Data science courses in Bangalore

    ReplyDelete
  15. Recompile with -Xlint:unchecked for details.

    plz help

    ReplyDelete
  16. I am getting following error
    API_ACCESS_NOT_CONFIGURED. how to solve this error plz help

    Reply

    ReplyDelete
  17. I love your article so much. Good job
    ExcelR is a global leader delivering a wide gamut of management and technical training over 40 countries. We are a trusted training delivery partner of 350+ corporate clients and universities across the globe with 28,000+ professionals trained across various courses. With over 20 Franchise partners all over the world, ExcelR helps individuals and organisations by providing courses based on practical knowledge and theoretical concepts.

    Excelr Solutions

    ReplyDelete
  18. Really impressed! Everything is very open and very clear clarification of issues. It contains truly facts. Your website is very valuable. Thanks for sharing.
    data science course

    ReplyDelete
  19. In our culture, the practice of treatment through various burn fat herbs and
    spices is widely prevalent. This is mainly due to the reason that different burn fat herbs grow in great abundance here. In addition to the
    treatment of various ailments these herbs prove beneficial in Healthy Ways To Lose Weight
    , especially for those who want to burn fat herbs

    we live in a world where diseases and their prevalence has gone off
    the charts. With the ever-growing incidences of illnesses and
    sufferings, one finds themselves caught up in a loop of medications
    and doctors’ visits. We, at https://goodbyedoctor.com/ , aim to find solutions for
    all your health-related problems in the most natural and harmless ways.
    We’re a website dedicated to providing you with the best of home
    remedies, organic solutions, and show you a path towards a healthy,
    happy life. visit https://goodbyedoctor.com/
    this site daily to know more about health tips and beauty tips.

    ReplyDelete
  20. I like you article. if you you want to saw Sufiyana Pyaar Mera Star Bharat Serials Full
    Sufiyana Pyaar Mera

    ReplyDelete
  21. Tech Gadgets reviews and latest Tech and Gadgets news updates, trends, explore the facts, research, and analysis covering the digital world.
    You will see Some Tech reviews below,

    lg bluetooth headset : You will also wish to keep design and assorted features in mind. The most essential part of the design here is the buttonsof lg bluetooth headset .

    Fastest Car in the World : is a lot more than the usual number. Nevertheless, non-enthusiasts and fans alike can’t resist the impulse to brag or estimate according to specifications. Fastest Car in the World click here to know more.

    samsung galaxy gear : Samsung will undoubtedly put a great deal of time and even more cash into courting developers It is looking for partners and will allow developers to try out
    different sensors and software. It is preparing two variants as they launched last year. samsung galaxy gear is very use full click to know more.

    samsung fridge : Samsung plans to supply family-oriented applications like health care programs and digital picture frames along with games It should stick with what they know and they
    do not know how to produce a quality refrigerator that is worth what we paid. samsung fridge is very usefull and nice product. clickcamera best for travel: Nikon D850: Camera It may be costly, but if you’re trying to find the very best camera you can purchase at this time, then Nikon’s gorgeous DX50 DSLR will
    probably mark each box. The packaging is in a vibrant 45.4-megapixel full-frame detector, the picture quality is simply wonderful. However, this is just half the story. Because of a complex 153-point AF system along with a brst rate of 9 frames per minute. camera best specification. click here to know more.

    ReplyDelete
  22. PhenQ Reviews - Is PhenQ a new Scam?
    Does it really work? Read this honest review and make a wise purchase decision. PhenQ ingredients are natural and ...
    It has been deemed fit for use in the market. It is not found to be a Scam weight loss pill.
    By far it is the safest and most effective weight loss pill available in the market today.

    Phenq reviews ..This is a powerful slimming formula made by combining the multiple weight loss
    benefits of various PhenQ ingredients. All these are conveniently contained in one pill. It helps you get the kind of body that you need. The ingredients of
    the pill are from natural sources so you don’t have to worry much about the side effects that come with other types of dieting pills.Is PhenQ safe ? yes this is completly safe.
    Where to buy PhenQ ? you can order online. you don`t know Where to order phenq check this site .

    visit https://mpho.org/ this site to know more about PhenQ Reviews.

    ReplyDelete
  23. - private detectives spain
    - private investigators in Spain at the best price. When you are obtaining the
    services offered to you by a private investigator.

    - private detective spain
    - Ways to choose private detectives spain safely | Do not make a mistake in hiring a
    private detective spain . In the regular course of your life.

    - private detectives in spain
    Ways to choose private detective in Spain safely | Do not make a mistake in hiring a
    private detective in Spain. In the regular course of your life,

    - private detective in spain
    Ways to choose private detective in spain safely | Do not make a mistake in ...
    not need to hire the professional services of a private detective agency.

    - detectives in spain
    - Ways to choose detectives in spain safely | Do not make a mistake in hiring
    a private detective in Spain. In the regular course of your life,

    - private detectives agency in spain
    - Ways to choose private detectives agency in spain safely | Do not make a mistake in hiring a
    private detective in Spain. In the regular course of your life,

    - private investigators spain
    private investigators spain at the best price. When you are obtaining the
    services offered to you by a private investigator, it is important.

    - private investigators madrid
    private investigators madrid in the Community of Madrid.
    Finding a detective in the Community of Madrid is an easy task.

    Hire private detectives from here.

    For More Info Check private investigator Here.

    ReplyDelete
  24. http://greenhomesgroup.com/- A 16+ year old Creative Media
    Solutions company.

    Engaged in Practical Creativity Advertising agencies in chennai for its clients from India,Europe and the US.
    A proven portfolio of work across diverseTop Graphic design studios in chennai media for its clients from different domains.
    An intricate3D augmented reality fusion of insightful strategy, cutting-edgeBranding agency in chennai
    ideas, and intelligent media integration is what we callCorporate Film Makers in chennai practical creativity.

    Check Our Website http://greenhomesgroup.com/.

    ReplyDelete
  25. http://karachipestcontrol. com/-Karachi Best Pest Control and Water Tank Cleaning Services.

    M/S. KarachiPestControl has very oldKarachi Pest Control Services Technical Pest Control workers
    thatfumigation services in Karachi live and add your space sevenfumigation in Karachi
    days every week.Pest services in karachiThis implies we are able toTermite Fumigation in Karachi
    be with you actuallytermite proofing in karachi quickly and keep our costs very competitive. an equivalent
    nativeUnique fumigation technician can see yourBed bugs fumigation in Karachi cuss management
    drawback through from begin to complete.Rodent Control Services Karachi Eco friendly technologies isWater tank cleaner in karachi
    also used.We are the firstWater Tank Cleaning Services in Karachi and still only professional water
    tank cleaning company in Karachi.With M/S. KarachiPestControlyou’re totallyBest Fumigation in karachi protected.


    Check Our Website http://karachipestcontrol. com/.

    ReplyDelete
  26. I think this is an informative post and it is very beneficial and knowledgeable. Therefore, I would like to thank you for the endeavors that you have made in writing this article. All the content is absolutely well-researched. Thanks... 상품권 매입

    ReplyDelete
  27. Gold and silver for life reviews.
    Thousands Across The Globe Using Mineshaft Bhindari gold and silver for life Training To Protect Their Wealth And Creating A Passive Income of 12% To 26.4% Per Year….


    Gold and silver for life reviews- How It Works?

    Minesh Bhindi created Gold and silver for life reviews because, after a long career in helping people grow their wealth through investment,
    he noticed something that he felt should benefit everyone. Since 2010, Gold and Silver for life has been helping people grow their wealth securely through strategic Investing in precious metals , gold and silver.
    As proud founder of Reverent Capital, a secure investment advisory firm, he consults with high net worth individuals from around the globe on the importance of secure
    investments in gold and silver

    Learn How to invest in gold from here kingsslyn.com now.

    ReplyDelete
  28. Genuine Import Medicine.http://noelbiotech.com/Named Patient Medicine.Genuine Cancer Medicine.

    Noel Biotech is an Indian entity,Genuine Import Medicines in India facilitating access to Advanced Healthcare Solutions
    Genuine cancer medicinesrecommended for various nicheNamed Patient Medicines in India therapeutic segments. Driven by an unparallel commitment
    to assist IndianReference Listed Drugs Patients and Medical Fraternity, Noel has been consistent in its approach
    Gene Therapy Innovationsto channelize globally advanced and relevant solutions that are essential for the Indian
    scenario of Healthcare andGene Therapies for Cancer Care (Oncology) India Disease Management.

    Noel Biotech’s Brentuximab Vedotin costingvision is to enable Indian Patients to experience the Clinical
    BenefitsIpilimumab cost in India of novel medications form across the globe, anticipatingVentoclax cost in India
    Prolonged Survival with Better Quality of Life.

    Check our website-http://noelbiotech.com/

    ReplyDelete
  29. Keto Pills The Fastest Way to Get Into Ketosis?
    Keto diet pills reviews to let you know how to get into ketosis fast and feel
    young & energetic. These keto diet pills work wonders when taken as advised.
    Read This Informative article from top to bottom about Best Keto diet pills reviews & See
    Keto pills can help you to get into ketogenesis quickly and enjoy life-long benefits of
    maintaining healthy weight.our amazing Keto Diet Pills Recommendation at the end!
    How to get into ketogenesis ?
    If you Don’t know Where to buy keto diet pills click here.
    To Know More Information Click https://ketodietpillsinfo.com/ here.

    ReplyDelete
  30. crowdsourcehttp://www.incruiter.com recruitment agency.

    We ’incruiter’ provide a uniquerecruitment agencies platform to various committed professionals
    placement consultancyacross the globe to use their skills and expertise to join as a recruiter and
    interviewer to empower the industry with talented human resources.Searching for the right candidate is never easy.
    job consultancy We use crowdsource recruitment to find right talent pool at much faster pace.
    Our candidate search follows application of a rigorous methodology, and a comprehensive screening to find an individual
    whorecruitment consultants is not only skilled but is also the right culture fit for your organization.
    Our interviewers are best in the industry,staffing agencies being experts from various verticals to judge right
    candidate for the job. They interview candidates taking into account primarily defined job specification of our clients and targeting
    them for needs of the organization.Thinking about payment?placement agencies Don’t worry, you pay when you hire.
    Whether you are a startup or an established enterprise, join our 10x faster recruitment process that reduces your hiring process by 50% and give you
    manpower consultancyefficient results.

    check our website:http://www.incruiter.com.

    ReplyDelete
  31. Nice information, valuable and excellent design, as share good stuff with good ideas and concepts, lots of great information and inspiration, both of which I need, thanks to offer such a helpful information here. game apk download

    ReplyDelete
  32. Great survey, I'm sure you're getting a great response. security guard school

    ReplyDelete
  33. I surely acquiring more difficulties from each surprisingly more little bit of it hatha yoga

    ReplyDelete
  34. I see the greatest contents on your blog and I extremely love reading them. auto Shampoo

    ReplyDelete
  35. I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own Blog Engine blog now. Really the blogging is spreading its wings rapidly. Your write up is a fine example of it. Wedding photographer

    ReplyDelete
  36. Hi to everybody, here everyone is sharing such knowledge, so it’s fastidious to see this site, and I used to visit this blog daily Alcohol delivery London

    ReplyDelete
  37. SSC Result 2020 Published Date & Time by ssc result
    ssc result 2020
    Education Board of Bangladesh.
    Many of You Search For SSC Result Kobe Dibe on Internet
    as Well as Facebook. The results of Secondary School Certificate
    (SSC)—and its equivalent examinations—for 2020 have been published.
    SSC & Dakhil Result 2020 Published Date is Very Important For T
    he Students Who Attend The SSC Exam 2020.

    ReplyDelete
  38. Super site! I am Loving it!! Will return once more, Im taking your food additionally, Thanks. עורך דין תאונת עבודה

    ReplyDelete
  39. ترفند برد و آموزش بازی انفجار آنلاین و شرطی، نیترو بهترین و پرمخاطب ‌ترین سایت انفجار ایرانی، نحوه برد و واقعیت ربات ها و هک بازی انجار در
    اینجا بخوانید
    کازینو آنلاین نیترو
    بازی حکم آنلاین نیترو
    بازی حکم آنلاین
    Introducing the Nitro Blast game site
    معرفی سایت بازی انفجار نیترو
    همان طور که می دانید بازی های کازینو های امروزه از محبوبیت ویژه ای برخودارند که این محبوبیت را مدیون سایت های شرط می باشند. با گسترش اینترنت این بازی ها محدودیت های مکانی و زمانی را پشت سرگذاشته و به صورت آنلاین درآمده اند.
    بازی انفجار نیترو
    بازی انفجار
    یکی از محبوب ترین بازی های کازینو، بازی انفجار می باشد که ساخته سایت های شرط بندی می باشد و امروزه از طرفداران ویژه ای برخودار است. با گسترش اینترنت سایت های شرط بندی مختلفی ایجاد شده اند که این بازی را به صورت آنلاین ساپورت می کنند. یکی از این سایت ها، سایت معتبر نیترو می باشد. در این مقاله قصد داریم به معرفی
    سایت بازی انفجار نیترو بپردازیم.
    سایت پیش بینی فوتبال نیتر
    سایت پیش بینی فوتبال
    بازی رولت نیترو
    کازینو آنلاین

    Visit https://www.wmsociety.org/
    here for more information

    ReplyDelete
  40. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.data science course in Hyderabad

    ReplyDelete
  41. Generic Latisse : Eyelashes drops 3ml with Bimatoprost 3%

    Natural Ways to Encourage eyelashes growth , iBeauty Care offers a wide variety of natural products for skin care

    iBeauty Care offers a wide variety of natural products for skin care, eyelashes growth, acne and many other health problems. All products are with clinically proven effects and great therapeutic results.
    Visit https://www.ibeauty care.com/home/21-generic-latisse.html here to buy this ar low cost.
    or visit The home page https://www.ibeauty-care.com/.

    ReplyDelete
  42. Thanks a lot very much for the high quality and results-oriented help. I won’t think twice to endorse your blog post to anybody who wants and needs support about this area. data science training in Hyderabad

    ReplyDelete
  43. Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article. data scientist courses

    ReplyDelete
  44. This is such an awesome asset, to the point that you are giving and you give it away for nothing.our article has piqued a lot of positive interest. https://eezbatteryreconditioning.com/

    ReplyDelete
  45. There is noticeably a bundle to know about this. I assume you made certain nice points in features also . Visit Here

    ReplyDelete
  46. I think this is an informative post and it is very beneficial and knowledgeable. Therefore, I would like to thank you for the endeavors that you have made in writing this article. All the content is absolutely well-researched. Thanks. https://unlockhipflexorsinfo.com/

    ReplyDelete
  47. Thanks for the blog filled with so many information. Stopping by your blog helped me to get what I was looking for. Now my task has become as easy as ABC.12 week yoga challenge

    ReplyDelete
  48. If your looking for Online Illinois license plate sticker renewals then you have need to come to the right place.We offer the fastest Illinois license plate sticker renewals in the state. plantation shutters

    ReplyDelete
  49. Truly, this article is really one of the very best in the history of articles. I am a antique ’Article’ collector and I sometimes read some new articles if I find them interesting. And I found this one pretty fascinating and it should go into my collection. Very good work! EPV approved courses

    ReplyDelete
  50. Interesting post. I Have Been wondering about this issue, so thanks for posting. Pretty cool post.It 's really very nice and Useful post.Thanks Ny altan

    ReplyDelete
  51. I’m happy I located this blog! From time to time, students want to cognitive the keys of productive literary essays composing. Your first-class knowledge about this good post can become a proper basis for such people. nice one tutoring

    ReplyDelete
  52. Hi there, I found your blog via Google while searching for such kinda informative post and your post looks very interesting for me
    data scientist course in hyderabad

    ReplyDelete
  53. It was good reading your article, Thanks for sharing it with us keep sharing.


    Data Science Training in Pune

    ReplyDelete
  54. A good blog always comes-up with new and exciting information and while reading I have feel that this blog is really have all those quality that qualify a blog to be a one. Baby clothes

    ReplyDelete
  55. I am impressed by the information that you have on this blog. It shows how well you understand this subject. Oxford Liquor Store

    ReplyDelete
  56. As always your articles do inspire me. Every single detail you have posted was great. Affordable Local SEO

    ReplyDelete
  57. Love to read it,Waiting For More new Update and I Already Read your Recent Post its Great Thanks. Best Coding Android Wallpapers

    ReplyDelete
  58. This is very useful post for me. This will absolutely going to help me in my project.
    data scientist course in malaysia

    ReplyDelete
  59. Cheap Web Hosting Plans In India with the best key features like Free Domain, Free SSL, Daily Backup, 24*7 Support, and Control Panel.

    ReplyDelete
  60. Great tips and very easy to understand. This will definitely be very useful for me when I get a chance to start my blog. Tito's Distilled

    ReplyDelete
  61. There's no doubt i would fully rate it after i read what is the idea about this article. You did a nice job.. medical malpractice attorney

    ReplyDelete
  62. This post is very simple to read and appreciate without leaving any details out. Great work! Tito's Distilled

    ReplyDelete
  63. Nice information, valuable and excellent design, as share good stuff with good ideas and concepts, lots of great information and inspiration, both of which I need, thanks to offer such a helpful information here. Harvey Insurance

    ReplyDelete
  64. I want you to thank for your time of this wonderful read!!! I definately enjoy every little bit of it and I have you bookmarked to check out new stuff of your blog a must read blog! Construction Company

    ReplyDelete
  65. You there, this is really good post here. Thanks for taking the time to post such valuable information. Quality content is what always gets the visitors coming. Chen Zhi Cambodia

    ReplyDelete
  66. Very nice blog. A great piece of writing. You have shared a true worthy blog and keep sharing more blogs with us. Thank you.
    Best Data Science Courses

    ReplyDelete
  67. Wow! Such an amazing and helpful post this is. I really really love it. It's so good and so awesome. I am just amazed. I hope that you continue to do your work like this in the future also https://601e860216774.site123.me/blog/wealth-contribution-to-society

    ReplyDelete
  68. Great job for publishing such a beneficial web site. Your web log isn’t only useful but it is additionally really creative too. neak oknha chen zhi

    ReplyDelete
  69. Very good written article. It will be supportive to anyone who utilizes it, including me. Keep doing what you are doing – can’r wait to read more posts. https://eatatbillybombers.wixsite.com/business-charity/post/cambodian-skills-development-to-help-lower-unemployment

    ReplyDelete
  70. Great post, you have pointed out some excellent points, I as well believe this is a very superb website. cambodia chen zhi

    ReplyDelete
  71. It's really nice and meanful. it's really cool blog. Linking is very useful thing.you have really helped lots of people who visit blog and provide them usefull information. liquor store that delivers near me

    ReplyDelete
  72. Outstanding article! I want people to know just how good this information is in your article. Your views are much like my own concerning this subject.
    Telecom Tower Technician
    Career Counselling Online

    ReplyDelete
  73. Great post! I am actually getting ready to across this information, It’s very helpful for this blog. Also great with all of the valuable information you have Keep up the good work you are doing well.
    Dry Cleaning Business
    Broiler Poultry Farming

    ReplyDelete
  74. This comment has been removed by the author.

    ReplyDelete

Spinner example using AppCompatSpinner widget

          When we have a requirement to use spinner(drop down) to show list of objects in your application. Here we will see how to use Ap...