Mengirim JSONObject ke Activity Lain Mengunakan Intent

Hai sobat, pada artikel kemarin yang berjudul Mengatur RecyclerView ItemClick Listener, telah ditunjukkan cara memberikan perintah click listener yang sebenarnya tidak ada pada bjek RecyclerView. Dan di artikle kali ini akan dijelaskan cara mengirimkan JSONObjek ke activity lain menggunakan intent..



Mungkin pada artikel sebelumnya saya telah menulis artikel tutorial android yang sebenarnya di dalamnya terdapat fungsi mengirim objek dari activity lain menggunakan intent. Tapi jika objek yang inigin kita kirim adalah objek dari JSON? Mudah saja, dengan menggunakan intent putextra, kita bisa mengirimkannya ke activity yang kita mau.

Penggunaanya hampir sama dengan intent putextra lainya, hanya saja objek yang akan kita kirim kita panggil terlebih dahulu pada activity sebelumnya dan selanjutnya tinggal kita ambil saat activity berpindah. Untuk lebh jelasnya sobat bisa lihat langkah-langkah di bawah ini

Baca juga "Cara Memasang Musik di Blog"

Pada arikel kemarin kita telah menambahkan perintah saat RecyclerView diklik, dan sekarang kita akan melanjutkanya agar lebih mudah. Silahkan sobat buka link berikut jika belum membuat project pada artikel sebelumnya. (Tutorial Android dengan Retrofit HTTP Library)

Nah untuk membuatnya, pertama buka project RetrofitHTTPLybrary, setelah itu tambahkan activity baru dengan nama DetailActivity

Buka MainActivity.java, masukkan kode berikut ini di dalam perintah onItemTouchListener


Intent i = new Intent(MainActivity.this, DetailActivity.class);
i.putExtra("title", movies.get(position).getTitle());
i.putExtra("date", movies.get(position).getReleaseDate());
i.putExtra("vote", movies.get(position).getVoteAverage().toString());
i.putExtra("overview", movies.get(position).getOverview());
i.putExtra("bg", movies.get(position).getPosterPath());
MainActivity.this.startActivity(i);


Keseluruhan dari MainActivity akan nampak seperti berikut ini


package com.blogsetyaaji.retrofithttplibrary;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import com.blogsetyaaji.retrofithttplibrary.Adapter.MoviesAdapter;
import com.blogsetyaaji.retrofithttplibrary.Model.Movie;
import com.blogsetyaaji.retrofithttplibrary.Model.MovieResponse;
import com.blogsetyaaji.retrofithttplibrary.Rest.ApiClient;
import com.blogsetyaaji.retrofithttplibrary.Rest.ApiInterface;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();

// TODO - insert your themoviedb.org API KEY here
private final static String API_KEY = "e5013e88aad0bad4821bdac93d1d6a30";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (API_KEY.isEmpty()) {
Toast.makeText(getApplicationContext(), "Please obtain your API KEY first from themoviedb.org", Toast.LENGTH_LONG).show();
return;
}

final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.movie_recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);

Call<MovieResponse> call = apiService.getTopRatedMovies(API_KEY);
call.enqueue(new Callback<MovieResponse>() {
@Override
public void onResponse(Call<MovieResponse>call, Response<MovieResponse> response) {
final List<Movie> movies = response.body().getResults();
Log.d(TAG, "Number of movies received: " + movies.size());
Toast.makeText(MainActivity.this, "Number of movies received: " + movies.size(), Toast.LENGTH_LONG).show();
recyclerView.setAdapter(new MoviesAdapter(movies, R.layout.list_item_movie, getApplicationContext()));

/*perintah klik recyclerview*/
recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
GestureDetector gestureDetector = new GestureDetector(getApplicationContext(), new GestureDetector.SimpleOnGestureListener() {

public boolean onSingleTapUp(MotionEvent e){
return true;
}
});

@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && gestureDetector.onTouchEvent(e)){
int position = rv.getChildAdapterPosition(child);
Toast.makeText(getApplicationContext(), "Id : " + movies.get(position).getId() + " selected", Toast.LENGTH_SHORT).show();

Intent i = new Intent(MainActivity.this, DetailActivity.class);
i.putExtra("title", movies.get(position).getTitle());
i.putExtra("date", movies.get(position).getReleaseDate());
i.putExtra("vote", movies.get(position).getVoteAverage().toString());
i.putExtra("overview", movies.get(position).getOverview());
i.putExtra("bg", movies.get(position).getPosterPath());
MainActivity.this.startActivity(i);

}
return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {

}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}
});
}

@Override
public void onFailure(Call<MovieResponse>call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});

}
}
 

Di dalam kode MainActivity tersebut, terdapat kode Intent dimana dia mengirimkan objek JSON dengan memanggil variablenya. Selanjutnya kita buat tampilan pada activity detail, di dalamnya kita akan menampilkan data lebih di dalamnya seperti gambar, judul, deskripsi dll. untuk membuatnya, pada activity_detail.xml, atur layoutnya seperti berikut ini


<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.blogsetyaaji.retrofithttplibrary.DetailActivity">

<LinearLayout
android:id="@+id/lay1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ImageView
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_gravity="center_horizontal"
android:background="#000" />

<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp">

<LinearLayout
android:id="@+id/lay2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textSize="24sp"
android:textStyle="bold" />

<TextView
android:id="@+id/txtDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ID"
android:textSize="18sp" />

</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:gravity="center_vertical"
android:orientation="horizontal">

<ImageView
android:id="@+id/rating_image"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_centerInParent="true"
android:scaleType="centerCrop"
android:src="@drawable/star"
android:tint="@color/colorAccent" />


<TextView
android:id="@+id/txtrating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="5.0"
android:textSize="20sp" />

</LinearLayout>

<TextView
android:id="@+id/txtDescrip"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_below="@id/lay2"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_marginTop="10dp"
android:text="Description" />

</RelativeLayout>
</android.support.v7.widget.CardView>



</LinearLayout>

</ScrollView>
 

Jika sudah, selanjutnya berpindah ke DetailActivity.java dan buat kodenya seperti berikut ini


package com.blogsetyaaji.retrofithttplibrary;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import org.w3c.dom.Text;

public class DetailActivity extends AppCompatActivity {

public TextView txtTitle, txtoverview, txtdate, txtvote;
public ImageView bg;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);

txtTitle = (TextView) findViewById(R.id.txtTitle);
txtTitle.setText(getIntent().getStringExtra("title"));

txtdate = (TextView) findViewById(R.id.txtDate);
txtdate.setText(getIntent().getStringExtra("date"));

txtoverview = (TextView) findViewById(R.id.txtDescrip);
txtoverview.setText(getIntent().getStringExtra("overview"));

txtvote = (TextView) findViewById(R.id.txtrating);
txtvote.setText(getIntent().getStringExtra("vote"));

bg = (ImageView) findViewById(R.id.bg);
Picasso.with(this)
.load("https://image.tmdb.org/t/p/w300_and_h450_bestv2" + getIntent().getStringExtra("bg"))
.resize(200, 300)
.into(bg);
}
}
 

Pada kode di atas, DetaiActivity akan menerima kiriman dari activity sebelumnya  dengan kode getStringExtra lalu berubah objek pada activity Detai sesuai dengan nilai variable pada Json.

Untuk membuat agar tampilanya lebih bagus dan kegunaanya makin bagus, kita tambahkan tombol kembali di sebelah kiri pojok. Caranya sangat mudah sekali, hanya dengan membuka AndroidManifest.xml dan tambahkan kode parent di dalam tag application seperti berikut ini


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blogsetyaaji.retrofithttplibrary">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
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>
<activity android:name=".DetailActivity"
android:parentActivityName=".MainActivity"></activity>
</application>

</manifest>


Jika sudah, jalankan aplikasinya dengan memilih menu Run 'app', mkaa tampilanya akan seperti berikut ini



Dan itu lha cara mengirim objek JSON ke activity lain.
Sekian artikel tentang Mengirim JSONObject ke Activity Lain Mengunakan Intent, semoga bermanfaat.



Tidak ada komentar

Diberdayakan oleh Blogger.