Как опубликовать данные в API с помощью Volley в Android?
Мы видели чтение данных из API с использованием запроса Volley с помощью запроса GET в Android. С помощью запроса GET мы можем отображать данные из API в формате JSON и использовать эти данные внутри нашего приложения. В этой статье мы рассмотрим публикацию наших данных в API с помощью запроса POST с Volleylibrary в Android.
Что мы собираемся построить в этой статье?
Мы создадим простое приложение, в котором мы будем отображать два поля EditText для имени и задания, и мы будем получать эти данные от наших пользователей и публиковать эти данные в нашем API. Для этого мы используем образец, для которого требуется API, который доступен бесплатно для тестирования. Пример видео приведен ниже, чтобы получить представление о том, что мы собираемся делать в этой статье. Обратите внимание, что мы собираемся реализовать этот проект на языке Java .
Данные можно добавлять в API в различных форматах, таких как XML, Form и JSON. Большинство API публикуют свои данные в формате JSON. Поэтому мы также будем публиковать наши данные в нашем API в виде объекта JSON.
Пошаговая реализация
Шаг 1: Создайте новый проект
Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Обратите внимание, что в качестве языка программирования выберите Java .
Шаг 2. Добавьте приведенную ниже зависимость в файл build.gradle.
Ниже приведена зависимость для Volley, которую мы будем использовать для получения данных из API. Чтобы добавить эту зависимость, перейдите в приложение > Gradle Scripts > build.gradle(app) и добавьте приведенную ниже зависимость в раздел зависимостей.
implementation ‘com.android.volley:volley:1.1.1’
После добавления этой зависимости синхронизируйте свой проект и теперь переходите к части AndroidManifest.xml .
Шаг 3. Добавление разрешений в Интернет в файле AndroidManifest.xml
Перейдите к приложению > AndroidManifest.xml и добавьте в него приведенный ниже код.
XML
<!--permissions for INTERNET--> < uses-permission android:name = "android.permission.INTERNET" /> |
Шаг 4: Работа с файлом activity_main.xml
Перейдите к приложению > res > layout > activity_main.xml и добавьте приведенный ниже код в этот файл. Ниже приведен код файла activity_main.xml .
XML
<? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" tools:context = ".MainActivity" > <!--edit text field for adding name--> < EditText android:id = "@+id/idEdtName" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_margin = "10dp" android:layout_marginTop = "40dp" android:hint = "Enter your name" /> <!--edit text for adding job--> < EditText android:id = "@+id/idEdtJob" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_margin = "10dp" android:hint = "Enter your job" /> <!--button for adding data--> < Button android:id = "@+id/idBtnPost" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_margin = "20dp" android:text = "Send Data to API" android:textAllCaps = "false" /> <!--text view for displaying our API response--> < TextView android:id = "@+id/idTVResponse" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_margin = "10dp" android:gravity = "center_horizontal" android:text = "Response" android:textAlignment = "center" android:textSize = "15sp" /> <!--progress bar for loading --> < ProgressBar android:id = "@+id/idLoadingPB" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_gravity = "center" android:visibility = "gone" /> </ LinearLayout > |
Шаг 5: Работа с файлом MainActivity.java
Перейдите к файлу MainActivity.java и обратитесь к следующему коду. Ниже приведен код файла MainActivity.java . Комментарии добавляются внутри кода, чтобы понять код более подробно.
Java
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; 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.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity { // creating variables for our edittext, // button, textview and progressbar. private EditText nameEdt, jobEdt; private Button postDataBtn; private TextView responseTV; private ProgressBar loadingPB; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // initializing our views nameEdt = findViewById(R.id.idEdtName); jobEdt = findViewById(R.id.idEdtJob); postDataBtn = findViewById(R.id.idBtnPost); responseTV = findViewById(R.id.idTVResponse); loadingPB = findViewById(R.id.idLoadingPB); // adding on click listener to our button. postDataBtn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // validating if the text field is empty or not. if (nameEdt.getText().toString().isEmpty() && jobEdt.getText().toString().isEmpty()) { Toast.makeText(MainActivity. this , "Please enter both the values" , Toast.LENGTH_SHORT).show(); return ; } // calling a method to post the data and passing our name and job. postDataUsingVolley(nameEdt.getText().toString(), jobEdt.getText().toString()); } }); } private void postDataUsingVolley(String name, String job) { // url to post our data loadingPB.setVisibility(View.VISIBLE); // creating a new variable for our request queue RequestQueue queue = Volley.newRequestQueue(MainActivity. this ); // on below line we are calling a string // request method to post the data to our API // in this we are calling a post method. StringRequest request = new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener<String>() { @Override public void onResponse(String response) { // inside on response method we are // hiding our progress bar // and setting data to edit text as empty loadingPB.setVisibility(View.GONE); nameEdt.setText( "" ); jobEdt.setText( "" ); // on below line we are displaying a success toast message. Toast.makeText(MainActivity. this , "Data added to API" , Toast.LENGTH_SHORT).show(); try { // on below line we are parsing the response // to json object to extract data from it. JSONObject respObj = new JSONObject(response); // below are the strings which we // extract from our json object. String name = respObj.getString( "name" ); String job = respObj.getString( "job" ); // on below line we are setting this string s to our text view. responseTV.setText( "Name : " + name + "
" + "Job : " + job); } catch (JSONException e) { e.printStackTrace(); } } }, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // method to handle errors. Toast.makeText(MainActivity. this , "Fail to get response = " + error, Toast.LENGTH_SHORT).show(); } }) { @Override protected Map<String, String> getParams() { // below line we are creating a map for // storing our values in key and value pair. Map<String, String> params = new HashMap<String, String>(); // on below line we are passing our key // and value pair to our parameters. params.put( "name" , name); params.put( "job" , job); // at last we are // returning our params. return params; } }; // below line is to make // a json object request. queue.add(request); } } |
Теперь запустите свое приложение и посмотрите на результат приложения, добавив данные.