Modul Retrofit 1. Gradle Yang Dibutuhkan
Modul Retrofit 1. Gradle Yang Dibutuhkan
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.okhttp3:okhttp:3.8.1'
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.8.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'
2. Tambahkan Permission
<uses-permission android:name="android.permission.INTERNET"/>
import android.content.Context;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
return okhttpBuilder;
}
// if (BuildConfig.DEBUG) {
// okhttpBuilder.addInterceptor(interceptor());
// }
okhttpBuilder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request newReq = request.newBuilder()
.header("Accept", "application/json")
.build();
return chain.proceed(newReq);
}
});
return retrofit.create(serviceClass);
}
}
5. Buat sebuah kelas untuk menampung response dari server dengan nama BaseResponse
import com.google.gson.annotations.SerializedName;
6. Selanjutnya buat sebuah file java untuk menampung data atau kita sebut sebuah model dari
data beri nama class tersebut dengan nama Data
package com.binus.retrofittutorial;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.SerializedName;
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(name);
}
@Override
public int describeContents() {
return 0;
}
@Override
public Data[] newArray(int size) {
return new Data[size];
}
};
package com.binus.retrofittutorial;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
@GET(Server.API_READ)
Call<BaseResponse<List<Data>>> apiRead();
@FormUrlEncoded
@POST(Server.API_UPDATE)
Call<BaseResponse> apiUpdate(
@Field("id_data") String id,
@Field("name") String name
);
@FormUrlEncoded
@POST(Server.API_DELETE)
Call<BaseResponse> apiDelete(@Field("id_data") String id);
}
package com.binus.retrofittutorial;
package com.binus.retrofittutorial;
10. Karna data akan ditampilkan pada recyclerview ada baiknya kita buat adapter terlebih dahulu,
buat sebuah layout untuk isi RecylerView dengan nama list_data dan buat sebuah class dengan
nama DataAdapter.
Script list_data.xml
<Button
android:layout_weight="1"
android:id="@+id/btn_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="edit" />
<Button
android:layout_weight="1"
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hapus" />
</LinearLayout>
Script adapter
package com.binus.retrofittutorial;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
OnDeleteClickListener onDeleteClickListener;
OnUpdateClickListener onUpdateClickListener;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(parent);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(data.get(position));
}
@Override
public int getItemCount() {
return data.size();
}
TextView tvNomer;
TextView tvName;
Button btnEdit;
Button btnRemove;
btnEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUpdateClickListener.onUpdateClick(getAdapterPosition());
}
});
btnRemove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onDeleteClickListener.onDeleteClick(getAdapterPosition());
}
});
}
11. Langkah selanjutnya adalah melakukan proses integrasi. Kita siapkan terlebih dahulu 4 buah
activity , yaitu :
a. MainActivity -> berfungi untuk menambah data
b. DataActivity -> berfungsi untuk melihat data
c. UpdateActivity -> berfungsi untuk mengubah data
Silahkan teman teman buat dulu activitynya, dan kemudian ubah script layout dan java
menjadi sebagai berikut.
Activity_Main.xml
<EditText
android:id="@+id/et_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Input your name"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:id="@+id/btn_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/et_name"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:text="Submit"/>
<Button
android:id="@+id/btn_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginBottom="10dp"
android:text="view data"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Activity_update.xml
<Button
android:id="@+id/btn_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/et_name"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:text="Submit"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Activity_data.xml
Main_activity.java
package com.binus.retrofittutorial;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initListener();
if(isEmpty(name))
etName.setError("Must not be empty");
else
addData(name);
}
});
btnShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataActivity.newInstance(MainActivity.this);
}
});
}
call.enqueue(new Callback<BaseResponse>() {
@Override
public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) {
if(response.code() == 200) {
Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
etName.setText("");
}
}
@Override
public void onFailure(Call<BaseResponse> call, Throwable t) {
Log.e(TAG + ".error", t.toString());
}
});
}
DataACtivity.java
package com.binus.retrofittutorial;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data);
initViews();
// Initialization adapter
adapter = new DataAdapter(this);
rvData.setLayoutManager(new LinearLayoutManager(this));
service = ServiceGenerator.createBaseService(this, DataService.class);
rvData.setAdapter(adapter);
loadData();
}
@Override
public void onFailure(Call<BaseResponse<List<Data>>> call, Throwable t) {
Log.e(TAG+".error", t.toString());
}
});
}
@Override
public void onFailure(Call<BaseResponse> call, Throwable t) {
Log.e(TAG+".errorDelete", t.toString());
}
});
}
@Override
public void onDeleteClick(final int position) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Apakah Anda Yakin Ingin Menghapusnya?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
doDelete(position, adapter.getData(position).getId());
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
@Override
public void onUpdateClick(int position) {
Data data = adapter.getData(position);
UpdateActivity.newInstance(this, data);
}
}
UpdateActivity.java
package com.binus.retrofittutorial;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
if(getIntent() != null) {
data = getIntent().getParcelableExtra(TAG+".data");
}
initViews();
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = etName.getText().toString();
Log.e("name", name);
if(isEmpty(name))
etName.setError("Must not be empty");
else
updateData(name);
}
});
}
call.enqueue(new Callback<BaseResponse>() {
@Override
public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) {
if(response.code() == 200) {
Toast.makeText(UpdateActivity.this, "Success", Toast.LENGTH_SHORT).show();
etName.setText("");
}
}
@Override
public void onFailure(Call<BaseResponse> call, Throwable t) {
Log.e(TAG + ".error", t.toString());
}
});
}
etName.setText(data.getName());
}
}
12. Langkah selanjutnya kita buat table di server dengan nama table tbl_nama
Dengan kolom :
Id_data (AI PK)
Name (Varchar(100))
13. Buat sebuah folder pada folder htdocs dengan nama folder projectta dan buat sebuah folder
data di dalam folder projectta tersebut.
14. Di dalam folder data buat sebuah file php dengan nama koneksi.php
Add.php
Read.php
Edit.php
Delete.php