Android — POST необработанный файл JSON в теле запроса на дооснащение

Опубликовано: 9 Января, 2023

REST API предоставляют нам функциональность, с помощью которой мы можем добавлять данные в нашу базу данных с помощью REST API. Для публикации этих данных в нашей базе данных мы должны использовать метод Post REST API для публикации наших данных. Мы можем отправлять данные в наш API в разных форматах. В этой статье мы рассмотрим, как опубликовать необработанный весь JSON в теле запроса на дооснащение. Пример видео приведен ниже, чтобы получить представление о том, что мы собираемся делать в этой статье.

Note: This Android article covered in both Java and Kotlin languages. 

Пошаговая реализация

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio ».

Шаг 2. Добавьте приведенную ниже зависимость в файл build.gradle.

Перейдите к Gradle Scripts > build.gradle(Module:app) и добавьте приведенную ниже зависимость в раздел зависимостей.

// below dependency for using the retrofit
implementation ‘com.squareup.retrofit2:retrofit:2.9.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.5.0’

После добавления этой зависимости синхронизируйте свой проект и теперь переходите к части AndroidManifest.xml.

Шаг 3. Добавление разрешений к Интернету в файле AndroidManifest.xml

Перейдите к приложению > AndroidManifest.xml и добавьте в него приведенный ниже код.

XML




<!--permissions for INTERNET-->
<uses-permission android:name="android.permission.INTERNET"/>

Шаг 4: Работа с файлом activity_main.xml

Перейдите к app > res > layout > activity_main.xml и добавьте приведенный ниже код в этот файл. Ниже приведен код файла activity_main.xml.

XML




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    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: Создание модального класса для хранения наших данных

Перейдите к приложению> java> имя пакета вашего приложения> Щелкните его правой кнопкой мыши> Создать> Класс Kotlin и назовите его как DataModal и добавьте к нему приведенный ниже код. Комментарии добавляются внутри кода, чтобы понять код более подробно.

Kotlin




package com.gtappdevelopers.kotlingfgproject
  
data class DataModal(
    // on below line we are creating 
      // variables for name and job
    var name: String,
    var job: String
)

Java




public class DataModal {
      
    // string variables for our name and job
    private String name;
    private String job;
  
    public DataModal(String name, String job) {
        this.name = name;
        this.job = job;
    }
  
    public String getName() {
        return name;
    }
  
    public void setName(String name) {
        this.name = name;
    }
  
    public String getJob() {
        return job;
    }
  
    public void setJob(String job) {
        this.job = job;
    }
      
}

Шаг 6: Создание класса интерфейса для нашего вызова API

Перейдите к приложению> java> имя пакета вашего приложения> Щелкните его правой кнопкой мыши> Создать> Класс Java, выберите его как Интерфейс и назовите файл как RetrofitAPI и добавьте к нему приведенный ниже код. Комментарии добавляются внутри кода, чтобы понять код более подробно.

Kotlin




package com.gtappdevelopers.kotlingfgproject
  
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.POST
  
interface RetrofitAPI {
  
    // as we are making a post request to post a data
    // so we are annotating it with post
    // and along with that we are passing a parameter as users
    @POST("users")
    // on below line we are creating a method to post our data.
    fun postData(@Body dataModal: DataModal?): Call<DataModal?>?
}

Java




import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
  
public interface RetrofitAPI {
      
    // as we are making a post request to post a data
    // so we are annotating it with post
    // and along with that we are passing a parameter as users
    @POST("users")
      
    // on below line we are creating a method to post our data.
    Call<DataModal> createPost(@Body DataModal dataModal);
}

Шаг 7: Работа с файлом MainActivity

Перейдите к приложению > java > имени пакета вашего приложения > файлу MainActivity и добавьте в него приведенный ниже код. В код добавлены комментарии для более подробного ознакомления.

Kotlin




package com.gtappdevelopers.kotlingfgproject
  
import android.os.Bundle
import android.view.View
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
  
class MainActivity : AppCompatActivity() {
  
    // on below line we are creating variables.
    lateinit var nameEdt: EditText
    lateinit var jobEdt: EditText
    lateinit var postBtn: Button
    lateinit var loadingPB: ProgressBar
    lateinit var responseTV: TextView
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
          // on below line we are initializing our variables.
        nameEdt = findViewById(R.id.idEdtName)
        jobEdt = findViewById(R.id.idEdtJob)
        postBtn = findViewById(R.id.idBtnPost)
        loadingPB = findViewById(R.id.idLoadingPB)
        responseTV = findViewById(R.id.idTVResponse)
  
        postBtn.setOnClickListener {
            if (nameEdt.text.toString().isEmpty() || jobEdt.text.toString().isEmpty()) {
                Toast.makeText(
                    this@MainActivity,
                    "Please enter both the values",
                    Toast.LENGTH_SHORT
                ).show();
                return@setOnClickListener
            }
            // calling a method to post the data and passing our name and job.
            postData(nameEdt.getText().toString(), jobEdt.getText().toString());
        }
    }
  
    private fun postData(name: String, job: String) {
        // below line is for displaying our progress bar.
        loadingPB.visibility = View.VISIBLE
  
        // on below line we are creating a retrofit
        // builder and passing our base url
        val retrofit = Retrofit.Builder()
            .baseUrl("https://reqres.in/api/")
            // as we are sending data in json format so
            // we have to add Gson converter factory
            .addConverterFactory(GsonConverterFactory.create())
            // at last we are building our retrofit builder.
            .build()
        // below line is to create an instance for our retrofit api class.
        val retrofitAPI = retrofit.create(RetrofitAPI::class.java)
  
        // passing data from our text fields to our modal class.
        val dataModal: DataModal = DataModal(name, job)
  
        // calling a method to create a post and passing our modal class.
        val call: Call<DataModal?>? = retrofitAPI.postData(dataModal)
  
        // on below line we are executing our method.
        call!!.enqueue(object : Callback<DataModal?> {
            override fun onResponse(call: Call<DataModal?>?, response: Response<DataModal?>) {
                // this method is called when we get response from our api.
                Toast.makeText(this@MainActivity, "Data added to API", Toast.LENGTH_SHORT).show()
  
                // below line is for hiding our progress bar.
                loadingPB.visibility = View.GONE
  
                // on below line we are setting empty text
                // to our both edit text.
                jobEdt.setText("")
                nameEdt.setText("")
  
                // we are getting response from our body
                // and passing it to our modal class.
                val response: DataModal? = response.body()
  
                // on below line we are getting our data from modal class 
                  // and adding it to our string.
                val responseString =
                    "Response Code : " + "201" + " " + "Name : " + response!!.name + "Job : " + response!!.job
  
                // below line we are setting our
                // string to our text view.
                responseTV.text = responseString
            }
  
            override fun onFailure(call: Call<DataModal?>?, t: Throwable) {
                // setting text to our text view when
                // we get error response from API.
                responseTV.text = "Error found is : " + t.message
            }
        })
    }
}

Java




package com.gtappdevelopers.kotlingfgproject;
  
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 retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
  
public class MainActivity extends AppCompatActivity {
  
    // creating variables for our edittext,
    <