Wednesday, August 24, 2016

Android Working With Retrofit HTTP Library

 بِسْمِ اللّهِ الرَّحْمَنِ الرَّحِيْمِ
Hari ini kita akan belajar melihat library mengagumkan yang dimiliki Retrofit, untuk melakukan panggilan http. Retrofit adalah alternti yang lebih baik dari hal kemudahan penggunaan, kinerja dan hal-hal lainnya.
Berikut ini adalah tampilan aplikasi akhir yang sudah kita buat 
Mendapatkan TMDB API Key / Contoh JSON
Untuk tutorial kali ini kita akan menggunakan TMDb API Untuk menggunakan API ini perlu mendapatkan KeyAPI . Di sini Anda dapat lihat bagaimana untuk mendapatkan kunci API. Singkatnya, Anda harus mendaftar dan login untuk mendapatkan Key.

Membuat Proyek Baru.
1. Buat proyek baru di Android Studio dari berkas ⇒ New Project . Ketika ia meminta Anda untuk memilih aktivitas default, pilih Activity kosong dan lanjutkan
2..Buka grandle.app dan tambahkan 
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'

    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
3. Karena project ini memerlukan koneksi internet, maka tambhkan di AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
4 . Buat empat sub paket yang bernama aktivitas , adaptor , sisanya dan Model dalam paket utama Anda. Memindahkan MainActivity bawah aktivitas paket.
5. Buat kelas bernama Movie.java dengan code
package com.example.taufiq.retrofit.model;

import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;
import java.util.List;

/** * Created by Taufiq on 8/24/2016. */public class Movie {
    @SerializedName("poster_path")
    private String posterPath;
    @SerializedName("adult")
    private boolean adult;
    @SerializedName("overview")
    private String overview;
    @SerializedName("release_date")
    private String releaseDate;
    @SerializedName("genre_ids")
    private List<Integer> genreIds = new ArrayList<Integer>();
    @SerializedName("id")
    private Integer id;
    @SerializedName("original_title")
    private String originalTitle;
    @SerializedName("original_language")
    private String originalLanguage;
    @SerializedName("title")
    private String title;
    @SerializedName("backdrop_path")
    private String backdropPath;
    @SerializedName("popularity")
    private Double popularity;
    @SerializedName("vote_count")
    private Integer voteCount;
    @SerializedName("video")
    private Boolean video;
    @SerializedName("vote_average")
    private Double voteAverage;

    public Movie(String posterPath, boolean adult, String overview, 
String releaseDate, List<Integer> genreIds, Integer id,
                 String originalTitle, String originalLanguage, String title,
 String backdropPath, Double popularity,
                 Integer voteCount, Boolean video, Double voteAverage) {
        this.posterPath = posterPath;
        this.adult = adult;
        this.overview = overview;
        this.releaseDate = releaseDate;
        this.genreIds = genreIds;
        this.id = id;
        this.originalTitle = originalTitle;
        this.originalLanguage = originalLanguage;
        this.title = title;
        this.backdropPath = backdropPath;
        this.popularity = popularity;
        this.voteCount = voteCount;
        this.video = video;
        this.voteAverage = voteAverage;
    }

    public String getPosterPath() {
        return posterPath;
    }

    public void setPosterPath(String posterPath) {
        this.posterPath = posterPath;
    }

    public boolean isAdult() {
        return adult;
    }

    public void setAdult(boolean adult) {
        this.adult = adult;
    }

    public String getOverview() {
        return overview;
    }

    public void setOverview(String overview) {
        this.overview = overview;
    }

    public String getReleaseDate() {
        return releaseDate;
    }

    public void setReleaseDate(String releaseDate) {
        this.releaseDate = releaseDate;
    }

    public List<Integer> getGenreIds() {
        return genreIds;
    }

    public void setGenreIds(List<Integer> genreIds) {
        this.genreIds = genreIds;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getOriginalTitle() {
        return originalTitle;
    }

    public void setOriginalTitle(String originalTitle) {
        this.originalTitle = originalTitle;
    }

    public String getOriginalLanguage() {
        return originalLanguage;
    }

    public void setOriginalLanguage(String originalLanguage) {
        this.originalLanguage = originalLanguage;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBackdropPath() {
        return backdropPath;
    }

    public void setBackdropPath(String backdropPath) {
        this.backdropPath = backdropPath;
    }

    public Double getPopularity() {
        return popularity;
    }

    public void setPopularity(Double popularity) {
        this.popularity = popularity;
    }

    public Integer getVoteCount() {
        return voteCount;
    }

    public void setVoteCount(Integer voteCount) {
        this.voteCount = voteCount;
    }

    public Boolean getVideo() {
        return video;
    }

    public void setVideo(Boolean video) {
        this.video = video;
    }

    public Double getVoteAverage() {
        return voteAverage;
    }

    public void setVoteAverage(Double voteAverage) {
        this.voteAverage = voteAverage;
    }
}
6.Dan buat MovieResponse dengan kode dibawah ini 
package com.example.taufiq.retrofit.model;
import com.google.gson.annotations.SerializedName;
import java.util.List;
/** * Created by Taufiq on 8/24/2016. */public class MoviesResponse {
    @SerializedName("page")
    private int page;
    @SerializedName("results")
    private List<Movie> results;
    @SerializedName("total_results")
    private int totalResults;
    @SerializedName("total_pages")
    private int totalPages;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public List<Movie> getResults() {
        return results;
    }

    public void setResults(List<Movie> results) {
        this.results = results;
    }

    public int getTotalResults() {
        return totalResults;
    }

    public void setTotalResults(int totalResults) {
        this.totalResults = totalResults;
    }

    public int getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }
}
7. Untuk mengirim permintaan jaringan ke API, kita perlu menggunakan Retrofit Builder 
class dan menentukan URL dasar untuk layanan. Jadi, buat sebuah kelas bernama ApiClient.java 
bawah sisa paket.


package com.example.taufiq.retrofit.rest;

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/** * Created by Taufiq on 8/24/2016. */public class ApiClient {

    public static final String BASE_URL = "http://api.themoviedb.org/3/";
    private static Retrofit retrofit = null;


    public static Retrofit getClient() {
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}
8.Buat API interface untuk memanggil API
package com.example.taufiq.retrofit.rest;

import com.example.taufiq.retrofit.model.MoviesResponse;
import com.example.taufiq.retrofit.model.MoviesResponse;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;

/** * Created by Taufiq on 8/24/2016. */public interface ApiInterface {
    @GET("movie/top_rated")
    Call<MoviesResponse> getTopRatedMovies(@Query("api_key") String apiKey);

    @GET("movie/{id}")
    Call<MoviesResponse> getMovieDetails(@Path("id") int id, @Query("api_key") String apiKey);
}
9.Mari kita membuat permintaan pertama dari MainActivity kami. Jika kita ingin mengkonsumsi API asynchronous, kita sebut layanan sebagai berikut. Buka MainActivity.java dan melakukan perubahan di bawah.

10. Mari kita membuat ListView untuk hasil diambil. Kami akan menggunakanRecyclerView untuk itu. Pertama-tama, menambahkannya ke gradle.gradle
compile 'com.android.support:recyclerview-v7:23.3.0'
11.Buka colors.xml dan menambahkan nilai warna di bawah ini.
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="orange">#FF3909</color>
    <color name="colorAccentDark">#00B482</color>
    <color name="colorBlack">#555555</color>
    <color name="colorWhite">#FFFFFF</color>
    <color name="colorGrey">#707070</color>
    <color name="colorGreyLight">#8A8A8A</color>
</resources>
12. Buat tata letak bernama star.xml bawah res ditarik dengan konten di bawah ini.
<!-- drawable/star.xml -->
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24"
    android:viewportWidth="24">
    <path
        android:fillColor="#000"
        android:pathData="M12,17.27L18.18,21L16.54,13.97L22,
9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z" />
</vector>
13. Buat tata letak bernama list_item_movie.java bawah tata letak res.

14 .Adapter adalah pola umum yang membantu untuk mengikat melihat dan data, jadi mari kita menerapkan adaptor untuk ini. Buat kelas bernama MoviesAdapter.java dan tambahkan kode dibawah
package com.example.taufiq.retrofit.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.taufiq.retrofit.model.Movie;
import com.example.taufiq.retrofit.R;
import java.util.List;
/** * Created by Taufiq on 8/24/2016. */public class MoviesAdapter extends 
RecyclerView.Adapter<MoviesAdapter.
MovieViewHolder> {

    private List<Movie> movies;
    private int rowLayout;
    private Context context;


    public static class MovieViewHolder extends RecyclerView.ViewHolder {
        LinearLayout moviesLayout;
        TextView movieTitle;
        TextView data;
        TextView movieDescription;
        TextView rating;


        public MovieViewHolder(View v) {
            super(v);
            moviesLayout = (LinearLayout) v.findViewById(R.id.movies_layout);
            movieTitle = (TextView) v.findViewById(R.id.title);
            data = (TextView) v.findViewById(R.id.subtitle);
            movieDescription = (TextView) v.findViewById(R.id.description);
            rating = (TextView) v.findViewById(R.id.rating);
        }
    }

    public MoviesAdapter(List<Movie> movies, int rowLayout, Context context) {
        this.movies = movies;
        this.rowLayout = rowLayout;
        this.context = context;
    }

    @Override    public MoviesAdapter.MovieViewHolder onCreateViewHolder(ViewGroup parent,
                                                            int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
        return new MovieViewHolder(view);
    }


    @Override    public void onBindViewHolder(MovieViewHolder holder, final int position) {
        holder.movieTitle.setText(movies.get(position).getTitle());
        holder.data.setText(movies.get(position).getReleaseDate());
        holder.movieDescription.setText(movies.get(position).getOverview());
        holder.rating.setText(movies.get(position).getVoteAverage().toString());
    }

    @Override    public int getItemCount() {
        return movies.size();
    }
}


15. Buka MainActivity.java dan memodifikasi kode seperti di bawah ini.


16. Jalankan dan kemudian lihat kendahannya, pastikan kalian terkoneksi dengan internet ..

semoga bermanfaat ^_^


1 komentar:

Post a Comment

Berkomentarlah dengan baik dan bijak..