¿Cómo obtener el nombre de la ciudad y el estado de Pincode en Android?

Muchas aplicaciones piden a los usuarios que agreguen la dirección en sus aplicaciones. Para facilitar esta tarea a los usuarios, primero solicitan al usuario que agregue Pincode y, a partir de ese Pincode, obtienen datos como la ciudad y el nombre del estado. Por lo tanto, la tarea del usuario se reduce a agregar nombres de ciudades y estados mientras ingresa la dirección. Junto con muchas aplicaciones, muchos sitios web utilizan esta funcionalidad que primero solicita al usuario que agregue el código PIN y, después de agregar el código PIN, los campos de ciudad y estado se ingresan automáticamente. Entonces, en este artículo, veremos cómo podemos incorporar esa función y obtener el nombre de la ciudad y el estado de cualquier código PIN de la India. El Pincode también se conoce como código postal que se utiliza para obtener los detalles de la oficina de correos cercana. Estos códigos generalmente se usan para obtener los detalles de la oficina de correos, como el nombre, la ciudad, el estado y muchos otros detalles. 

¿Qué vamos a construir en este artículo?  

Construiremos una aplicación simple en la que ingresaremos un código PIN y, después de hacer clic en un botón, podremos ver los detalles, como el nombre de la ciudad, el estado y el país. A continuación se muestra la imagen GIF en la que conoceremos lo que vamos a construir en este artículo. El código PIN es proporcionado por las oficinas de correos y los servicios postales. El correo indio es uno de los operadores de servicios postales más populares de la India. Entonces, en este proyecto, usaremos una API proporcionada por Indian Post que nos brindará detalles como la ciudad, el estado y el nombre del país. 

Implementación paso a paso

Paso 1: Crea un nuevo proyecto en Android Studio

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: agregue la dependencia a continuación en su archivo build.gradle

A continuación se muestra la dependencia de Volley que usaremos para obtener los datos de la API de Indian Post. 

implementación ‘com.android.volley:volley:1.1.1’

Después de agregar esta dependencia, sincronice su proyecto y ahora avance hacia la parte XML. 

Paso 3: trabajar con el archivo activity_main.xml

Vaya al archivo activity_main.xml y consulte el siguiente código. A continuación se muestra el código para el archivo activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    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:orientation="vertical"
    tools:context=".MainActivity">
  
    <!--heading text view-->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:text="Pin code validator"
        android:textAlignment="center"
        android:textColor="@color/purple_500"
        android:textSize="30sp" />
      
    <!-- edit text for entering our pin code
         we are specifying input type as number-->
    <EditText
        android:id="@+id/idedtPinCode"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:hint="Enter pin code"
        android:importantForAutofill="no"
        android:inputType="number"
        android:maxLines="1"
        android:singleLine="true" />
      
    <!--button to get the data from pin code-->
    <Button
        android:id="@+id/idBtnGetCityandState"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="50dp"
        android:text="Get city and state"
        android:textAllCaps="false" />
      
    <!--text view to display the data
        received from pin code-->
    <TextView
        android:id="@+id/idTVPinCodeDetails"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:padding="10dp"
        android:textAlignment="center"
        android:textAllCaps="false"
        android:textColor="@color/purple_500"
        android:textSize="20sp" />
  
</LinearLayout>

Paso 4: trabajar con el archivo MainActivity.java

MainActivity.java MainActivity.java

Java

import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
  
import androidx.appcompat.app.AppCompatActivity;
  
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 org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
  
public class MainActivity extends AppCompatActivity {
    // creating variables for edi text, 
    // button and our text views.
    private EditText pinCodeEdt;
    private Button getDataBtn;
    private TextView pinCodeDetailsTV;
      
    // creating a variable for our string.
    String pinCode;
      
    // creating a variable for request queue.
    private RequestQueue mRequestQueue;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
          
        // initializing our variables.
        pinCodeEdt = findViewById(R.id.idedtPinCode);
        getDataBtn = findViewById(R.id.idBtnGetCityandState);
        pinCodeDetailsTV = findViewById(R.id.idTVPinCodeDetails);
          
        // initializing our request que variable with request
        // queue and passing our context to it.
        mRequestQueue = Volley.newRequestQueue(MainActivity.this);
  
        // initialing on click listener for our button.
        getDataBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // getting string  from EditText.
                pinCode = pinCodeEdt.getText().toString();
                  
                // validating if the text is empty or not.
                if (TextUtils.isEmpty(pinCode)) {
                    // displaying a toast message if the
                    // text field is empty
                    Toast.makeText(MainActivity.this, "Please enter valid pin code", Toast.LENGTH_SHORT).show();
                } else {
                    // calling a method to display 
                    // our pincode details.
                    getDataFromPinCode(pinCode);
                }
            }
        });
    }
  
    private void getDataFromPinCode(String pinCode) {
          
        // clearing our cache of request queue.
        mRequestQueue.getCache().clear();
          
        // below is the url from where we will be getting 
        // our response in the json format.
        String url = "http://www.postalpincode.in/api/pincode/" + pinCode;
          
        // below line is use to initialize our request queue.
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
          
        // in below line we are creating a 
        // object request using volley.
        JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                // inside this method we will get two methods 
                // such as on response method
                // inside on response method we are extracting 
                // data from the json format.
                try {
                    // we are getting data of post office
                    // in the form of JSON file.
                    JSONArray postOfficeArray = response.getJSONArray("PostOffice");
                    if (response.getString("Status").equals("Error")) {
                        // validating if the response status is success or failure.
                        // in this method the response status is having error and 
                        // we are setting text to TextView as invalid pincode.
                        pinCodeDetailsTV.setText("Pin code is not valid.");
                    } else {
                        // if the status is success we are calling this method
                        // in which we are getting data from post office object
                        // here we are calling first object of our json array.
                        JSONObject obj = postOfficeArray.getJSONObject(0);
                          
                        // inside our json array we are getting district name,
                        // state and country from our data.
                        String district = obj.getString("District");
                        String state = obj.getString("State");
                        String country = obj.getString("Country");
                          
                        // after getting all data we are setting this data in 
                        // our text view on below line.
                        pinCodeDetailsTV.setText("Details of pin code is : \n" + "District is : " + district + "\n" + "State : "
                                + state + "\n" + "Country : " + country);
                    }
                } catch (JSONException e) {
                    // if we gets any error then it 
                    // will be printed in log cat.
                    e.printStackTrace();
                    pinCodeDetailsTV.setText("Pin code is not valid");
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // below method is called if we get 
                // any error while fetching data from API.
                // below line is use to display an error message.
                Toast.makeText(MainActivity.this, "Pin code is not valid.", Toast.LENGTH_SHORT).show();
                pinCodeDetailsTV.setText("Pin code is not valid");
            }
        });
        // below line is use for adding object 
        // request to our request queue.
        queue.add(objectRequest);
    }
}

Paso 5: agregue permiso para Internet en el archivo de manifiesto

Vaya a la aplicación > archivo AndroidManifest.xml y agréguele los siguientes permisos. 

<usos-permiso android:name=”android.permission.INTERNET”/>

Producción:

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *