package com.mindorks.framework.mvi.ui.main.intent sealed class MainIntent { object FetchUser : MainIntent() }// FULL EXAMPLE FOR RETROFIT //add Retrofit dependencies to gradle file //file build.gradele implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.10' // create an interface for more flexibility // file MyAPI.kt interface MyAPI(){ // function calling to server // @Field("your_name_of_field") under this name we will receive our request on the server // Like if(isset($_POST("your_name_of_field"))){ do something } //PHP @FormUrlEncoded // required annotation @POST("server.php") // address of the page to which we send data and from which we receive a response fun SendAndGetPost( @Field("name") userName: String? @Field("password") userPass: String? ):Call<ResponsedData?>? // class ResponsedData.kt companion object{ private val client = OkHttpClient.Builder().build() operator fun invoke():MyAPI{ return Retrofit.Builder() // https://google.com/folder/ (path example) .baseUrl("https://yor_server_path/") .addConverterFactory(GsonConverterFactory.create()) .client(client) .build() .create(MyAPI::class.java) } } } // create a class to receive our response from the server // file ResponsedData.kt class ResponsedData{ val email: String? = null val age: String? = null //variable names must match the names sent from the server ! } // ActivityMain calls the function and get the data class ActivityMain : AppCompatActivity(){ override fun onCreate(savedInstance: Bundle){ super.onCreate(savedInstance) setContentView(R.layout.activity_main) val name = "myName" val password = "1234567" MyAPI().SendAndGetPost(name, password)?enqueue( object: CalBack<ResponsedData?>{ override fun onResponse( call: Call<ResponsedData?>, response: Response<ResponsedData?>) { if(!response.isSuccessful){ Log.e("API-ERROR", response.code().toString()) return }else{ // val answer: ResponsedData val answer = response.body() email.name age.password // data for use } } override fun onFalure( call: Call<ResponsedData?>, t: Throwable) { Log.e("API-ERROR", t.printStackTrace()) } }) } } --------------------- SERVER SIDE ------------------------------------------- // this is how the file on the server looks like // the path to which we registered in the interface of our application // file server.php <?php // Data Base includes // or any sources if(isset($_POST("name")) && isset($_POST("password"))){ $js = array( 'email'=>"some data from DB", 'age'=>"some data from DB" ); echo json_encode($js); exit(); } // all examples are taken from here // https://square.github.io/retrofit/- intoduction 1. post is used to send data to server - exapmle "simple post" @POST("posts") Call<Post> createPost(@Body Post post); "post with from url encoded " @FormUrlEncoded @POST("posts") Call<Post> createPost( @Field("userId") int userid , @Field("title") String title, @Field("body") String body ); "using map" @FormUrlEncoded @POST("posts") Call<Post> createPost(@FieldMap Map<String,String> postMap); - INTERFACE public interface MyWebService { String BASE_URL = "https://jsonplaceholder.typicode.com/"; String FEED = "posts"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); @GET(FEED) Call<List<Post>> getPosts(); } - MODEL CLASS public class Post { private int userId; private int id; private String title; private String body; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } } - IN ACTIVITY WHERE TO SEND POST REQUEST Post post = new Post(1,"Post Title","this is post body"); Map<String,String> postmap = new HashMap<>(); postmap.put("userId","33"); postmap.put("title","My post title"); postmap.put("body","this is my post body in the map"); Call<Post> postCall = myWebService.createPost(postmap); postCall.enqueue(new Callback<Post>() { @Override public void onResponse(Call<Post> call, Response<Post> response) { if (response.isSuccessful()){ textView.setText(String.valueOf(response.code())); show(response.body()); } } @Override public void onFailure(Call<Post> call, Throwable t) { } });