[embedyt] https://www.youtube.com/watch?v=GP5OyYDu_mU[/embedyt]
Links & DependenciesComment.javaPost.javaactivity_main.xmlJsonPlaceHolderApi.javaMainActivity.javaAndroidManifest.xml
Retrofit + converter dependencies:
JSONPlaceHolder API:
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 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 int getId() { return id; } public String getTitle() { return title; } public String getText() { return text; } }
<?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>
package com.codinginflow.retrofitexample; import java.util.List; import java.util.Map; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.Field; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; 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); }
package com.codinginflow.retrofitexample; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import java.util.HashMap; import java.util.List; import java.util.Map; 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); Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class); //getPosts(); //getComments(); createPost(); } 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()); } }); } }
<?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>