Skip to content

Instantly share code, notes, and snippets.

@codinginflow
Created October 6, 2021 18:25
Show Gist options
  • Save codinginflow/3f8719d1b971fd9ef24f096f5696d1fd to your computer and use it in GitHub Desktop.
Save codinginflow/3f8719d1b971fd9ef24f096f5696d1fd to your computer and use it in GitHub Desktop.
Retrofit Tutorial Part 6
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
tools:context=".MainActivity">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_view_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000" />
</android.support.v4.widget.NestedScrollView>
</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.codinginflow.retrofitexample">
<uses-permission android:name="android.permission.INTERNET" />
<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>
</application>
</manifest>
package com.codinginflow.retrofitexample;
import com.google.gson.annotations.SerializedName;
public class Comment {
private int postId;
private int id;
private String name;
private String email;
@SerializedName("body")
private String text;
public int getPostId() {
return postId;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getText() {
return text;
}
}
package com.codinginflow.retrofitexample;
import java.util.List;
import java.util.Map;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.HeaderMap;
import retrofit2.http.Headers;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
public interface JsonPlaceHolderApi {
@GET("posts")
Call<List<Post>> getPosts(
@Query("userId") Integer[] userId,
@Query("_sort") String sort,
@Query("_order") String order
);
@GET("posts")
Call<List<Post>> getPosts(@QueryMap Map<String, String> parameters);
@GET("posts/{id}/comments")
Call<List<Comment>> getComments(@Path("id") int postId);
@GET
Call<List<Comment>> getComments(@Url String url);
@POST("posts")
Call<Post> createPost(@Body Post post);
@FormUrlEncoded
@POST("posts")
Call<Post> createPost(
@Field("userId") int userId,
@Field("title") String title,
@Field("body") String text
);
@FormUrlEncoded
@POST("posts")
Call<Post> createPost(@FieldMap Map<String, String> fields);
@Headers({"Static-Header1: 123", "Static-Header2: 456"})
@PUT("posts/{id}")
Call<Post> putPost(@Header("Dynamic-Header") String header,
@Path("id") int id,
@Body Post post);
@PATCH("posts/{id}")
Call<Post> patchPost(@HeaderMap Map<String, String> headers,
@Path("id") int id,
@Body Post post);
@DELETE("posts/{id}")
Call<Void> deletePost(@Path("id") int id);
}
package com.codinginflow.retrofitexample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
private TextView textViewResult;
private JsonPlaceHolderApi jsonPlaceHolderApi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewResult = findViewById(R.id.text_view_result);
Gson gson = new GsonBuilder().serializeNulls().create();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request newRequest = originalRequest.newBuilder()
.header("Interceptor-Header", "xyz")
.build();
return chain.proceed(newRequest);
}
})
.addInterceptor(loggingInterceptor)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
getPosts();
//getComments();
//createPost();
//updatePost();
//deletePost();
}
private void getPosts() {
Map<String, String> parameters = new HashMap<>();
parameters.put("userId", "1");
parameters.put("_sort", "id");
parameters.put("_order", "desc");
Call<List<Post>> call = jsonPlaceHolderApi.getPosts(parameters);
call.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
if (!response.isSuccessful()) {
textViewResult.setText("Code: " + response.code());
return;
}
List<Post> posts = response.body();
for (Post post : posts) {
String content = "";
content += "ID: " + post.getId() + "\n";
content += "User ID: " + post.getUserId() + "\n";
content += "Title: " + post.getTitle() + "\n";
content += "Text: " + post.getText() + "\n\n";
textViewResult.append(content);
}
}
@Override
public void onFailure(Call<List<Post>> call, Throwable t) {
textViewResult.setText(t.getMessage());
}
});
}
private void getComments() {
Call<List<Comment>> call = jsonPlaceHolderApi
.getComments("https://jsonplaceholder.typicode.com/posts/3/comments");
call.enqueue(new Callback<List<Comment>>() {
@Override
public void onResponse(Call<List<Comment>> call, Response<List<Comment>> response) {
if (!response.isSuccessful()) {
textViewResult.setText("Code: " + response.code());
return;
}
List<Comment> comments = response.body();
for (Comment comment : comments) {
String content = "";
content += "ID: " + comment.getId() + "\n";
content += "Post ID: " + comment.getPostId() + "\n";
content += "Name: " + comment.getName() + "\n";
content += "Email: " + comment.getEmail() + "\n";
content += "Text: " + comment.getText() + "\n\n";
textViewResult.append(content);
}
}
@Override
public void onFailure(Call<List<Comment>> call, Throwable t) {
textViewResult.setText(t.getMessage());
}
});
}
private void createPost() {
Post post = new Post(23, "New Title", "New Text");
Map<String, String> fields = new HashMap<>();
fields.put("userId", "25");
fields.put("title", "New Title");
Call<Post> call = jsonPlaceHolderApi.createPost(fields);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
if (!response.isSuccessful()) {
textViewResult.setText("Code: " + response.code());
return;
}
Post postResponse = response.body();
String content = "";
content += "Code: " + response.code() + "\n";
content += "ID: " + postResponse.getId() + "\n";
content += "User ID: " + postResponse.getUserId() + "\n";
content += "Title: " + postResponse.getTitle() + "\n";
content += "Text: " + postResponse.getText() + "\n\n";
textViewResult.setText(content);
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
textViewResult.setText(t.getMessage());
}
});
}
private void updatePost() {
Post post = new Post(12, null, "New Text");
Map<String, String> headers = new HashMap<>();
headers.put("Map-Header1", "def");
headers.put("Map-Header2", "ghi");
Call<Post> call = jsonPlaceHolderApi.patchPost(headers, 5, post);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
if (!response.isSuccessful()) {
textViewResult.setText("Code: " + response.code());
return;
}
Post postResponse = response.body();
String content = "";
content += "Code: " + response.code() + "\n";
content += "ID: " + postResponse.getId() + "\n";
content += "User ID: " + postResponse.getUserId() + "\n";
content += "Title: " + postResponse.getTitle() + "\n";
content += "Text: " + postResponse.getText() + "\n\n";
textViewResult.setText(content);
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
textViewResult.setText(t.getMessage());
}
});
}
private void deletePost() {
Call<Void> call = jsonPlaceHolderApi.deletePost(5);
call.enqueue(new Callback<Void>() {
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
textViewResult.setText("Code: " + response.code());
}
@Override
public void onFailure(Call<Void> call, Throwable t) {
textViewResult.setText(t.getMessage());
}
});
}
}
package com.codinginflow.retrofitexample;
import com.google.gson.annotations.SerializedName;
public class Post {
private int userId;
private Integer id;
private String title;
@SerializedName("body")
private String text;
public Post(int userId, String title, String text) {
this.userId = userId;
this.title = title;
this.text = text;
}
public int getUserId() {
return userId;
}
public Integer getId() {
return id;
}
public String getTitle() {
return title;
}
public String getText() {
return text;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment