Hai sobat, pada artikel sebelumnya yang berjudul Membuat Aplikasi Sederhana dengan Material Design, telah dijelaskan langkah-langkah membuat aplikasi sederhana dengan material design sehingga nampak bagus dan modern. Dan kali ini kita akan membuat satu aplikasi sederhana tentang portal berita dengan menggunakan json.
Pernah kan sobat mendownload aplikasi berita dari PlayStore seperti Detik.com atau Baca? Dua aplikasi tersebut termasuk aplikasi portal berita, aplikasi yang dibuat untuk menampilkan berita dari sebuah laman web. Cara ini juga bisa disebut dengan WebService, yaitu teknik mengambil informasi dari sebuah web atau menjalankan fungsi aplikasi dengan memanggil data dari web.
Dengan mengunakan webservice kita bisa mendapatkan banyak manfaat seperti kontrol jarak jauh, mempercepat pengiriman data dan ringan dalam penggunaan. Dan kali ini kita akan membuat alikasi portal berita menggunakan layanan webservice. Data untuk aplikasi portal berita ini berasal dari database mySQL yang nantinya kita panggil menggunakan JSON. JSON merupakan file javascript yang berguna untuk pertukaran data dari java ke php atau sebaliknya. Untuk membuat aplikasi android menggunakan webservice, dibutuhkan aplikasi web server untuk mengelola server web yang dibuat. Sobat bisa menggunakan aplikasi XAMPP untuk membuat database dan mengelola server.
Baik, sekarang kita buat aplikasinya, silakan sobat ikuti langkah-langkah berikut dengan cermat
Pertama, sobat buka aplikasi XAMPP sobat lalu pergi ke phpMyAdmin dan buat database baru dengan nama db_berita, jika sudah buat tabel baru dengan nama berita. Buat tabelnya seperti berikut ini
Jika sudah, sekarang sobat buat file php baru menggunakan Dreamweaver 8 atau text editor lainya. Buat kodenya seperti di bawah ini :
<?php
// definisikan koneksi ke database
$server = "localhost";
$username = "root";
$password = "";
$database = "db_berita";
// Koneksi dan memilih database di server
mysql_connect($server,$username,$password) or die("Koneksi gagal");
mysql_select_db($database) or die("Database tidak bisa dibuka");
?>
Simpan dan beri nama koneksi.php. Setelah itu sobat buat file baru dengan nama berita.php yang akan menampilkan data berita berupa list, buat kodenya seperti berikut ini
<?php
include './config/koneksi.php';
$query = mysql_query("SELECT * FROM berita ORDER BY id_berita desc");
$json = '{"berita": [';
// bikin looping dech array yang di fetch
while ($row = mysql_fetch_array ($query)) {
//tanda kutip dua (") tidak diijinkan oleh string json,
//maka akan kita replace dengan karakter `
//strip_tag berfungsi untuk menghilangkan tag-tag html pada string
$char = '"';
$json .= '{"id":"'.$row['id_berita'].'",
"judul":"'.str_replace($char,'`',strip_tags($row['judul'])).'",
"gambar":"http://192.168.77.247/portalBerita/foto_berita/'.$row['gambar'].'"},';
}
// buat menghilangkan koma diakhir array
$json = substr($json,0,strlen($json)-1);
$json .= ']}';
// print json
echo $json;
?>
Buat file baru dan beri nama detail_berita.php yang berfungsi menampilkan detail berita ketika list berita diklik, buat kodenya seperti berikut ini
<?php
$kd="";
include './config/koneksi.php';
//$kd = $_GET['idberita'];
if(isset($_GET['id_berita'])){
$kd=$_GET['id_berita'];
}
$query = mysql_query('SELECT * FROM berita where id_berita="'.$kd.'"');
$json = '{"berita": [';
while($row=mysql_fetch_array($query))
{
//tanda kutip dua (") tidak diijinkan oleh string json, maka akan kita replace dengan karakter `
//strip_tag berfungsi untuk menghilangkan tag-tag html pada string
$char = '"';
$json .='{"id":"'.$row['id_berita'].'",
"judul":"'.str_replace($char,'`',strip_tags($row["judul"])).'",
"isi":"'.str_replace($char,'`',strip_tags($row["isi_berita"])).'",
"gambar":"http://192.168.77.247/portalBerita/foto_berita/'.$row['gambar'].'"},';
}
// buat menghilangkan koma diakhir array
$json = substr($json,0,strlen($json)-1);
$json .= ']}';
// print json
echo $json;
?>
Selanjutnya sobat masukkan file tadi ke folder htdoc dan buat susunan foldernya seperti berikut ini
File-file tadi adalah file json untuk nantinya digunakan untuk memanggil data dari server. Didalam file php di atas terdapat url server untuk mengakses file tersebut, silahkan disesuaikan menurut struktur dan url/nomor IP milik sobat.
Selanjutnya kita akan membuat aplikasinya di Android Studio, seperti biasa pertama sobat buat project baru dengan nama Portal Berita dan untuk packagenya dengan nama blogsetyaaji.com
Saat mengatur activity, ubahlah nama MainActivity menjadi BeritaUtama, sedangkan activity_main.xml ubahlah menjadi berita_utama.xml
Selanjutnya sobat instal dulu dependencies yang dibutuhkan di buld:grandle(Module app) dengan cara menyesuaikan kodenya seperti di bawah ini
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.blogsetyaaji.portalberita2"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
useLibrary 'org.apache.http.legacy'
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:design:24.1.1'
compile 'com.android.support:cardview-v7:24.1.1'
compile 'de.hdodenhof:circleimageview:2.0.0'
compile 'com.squareup.picasso:picasso:2.5.2'
}
Akan muncul pemberitahuan di atas kode editor pilih sync now
Pindah ke pengaturan layout, sobat buka Berita_Utam.xml dan buat kodenya seperti berikut ini
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#070707"
android:textSize="10sp" />
<View
android:layout_height="1dp"
android:layout_width="fill_parent"
android:background="#f5f2f2" />
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#f5f2f2"
android:dividerHeight="1dp" />
</LinearLayout>
Selanjutnya buat layout baru lagi dengan nama list_row.xml dan buat kodenya seperti berikut ini
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="2dp"
android:orientation="horizontal">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/gambar"/>
<TextView
android:id="@+id/kode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kode"
android:visibility="gone" />
<TextView
android:id="@+id/judul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Judul"
android:layout_marginTop="5dp"
android:layout_marginLeft="16dp"/>
</LinearLayout>
Buat file layout lagi dengan nama single_list_item.xml dan buat kodenya seperti berikut ini
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:background="#fffefe"
android:padding="10dp"
android:layout_height="wrap_content">
<TextView android:id="@+id/judul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:textStyle="bold"
android:paddingTop="10dip"
android:paddingBottom="5dip"
android:textColor="#333333"/>
<TextView android:id="@+id/detail"
android:layout_width="wrap_content"
android:textStyle="bold"
android:textSize="12dip"
android:paddingTop="5dip"
android:paddingBottom="5dip"
android:layout_height="wrap_content"
android:textColor="#999999"/>
<ImageView
android:id="@+id/imageView1"
android:layout_width="250dip"
android:layout_gravity="center"
android:layout_height="150dip"
android:src="@drawable/no_image"/>
<TextView android:id="@+id/content"
android:layout_width="wrap_content"
android:textSize="14dip"
android:layout_height="wrap_content"
android:textColor="#333333"/>
</LinearLayout>
</ScrollView>
Setelah membuat file layout, sekarang kita membuat file java. Di sini kita membutuhkan beberapa file java dan library yang digunakan untuk memanggil dan menampilkan data json yang telah diparsing berupa file gambar.
Dan untuk pertama kali, silahkan sobat buka file BeritaUtama.java dan buat kodenya seperti berikut ini
package com.blogsetyaaji.portalberita2;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
public class BeritaUtama extends Activity {
private ProgressDialog pDialog;
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> DaftarBerita = new
ArrayList<HashMap<String, String>>();
private static String url_berita = "http://192.168.77.247/portalBerita/berita.php";
public static final String TAG_ID = "id";
public static final String TAG_JUDUL = "judul";
public static final String TAG_GAMBAR = "gambar";
JSONArray string_json = null;
ListView list;
LazyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.berita_utama);
DaftarBerita = new ArrayList<HashMap<String, String>>();
new AmbilData().execute();
list = (ListView) findViewById(R.id.list);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
HashMap<String, String> map = DaftarBerita.get(position);
// Starting new intent
Intent in = new Intent(getApplicationContext(), DetailBerita.class);
in.putExtra(TAG_ID, map.get(TAG_ID));
in.putExtra(TAG_GAMBAR, map.get(TAG_GAMBAR));
startActivity(in);
}
});
}
public void SetListViewAdapter(ArrayList<HashMap<String,
String>> berita) {
adapter = new LazyAdapter(this, berita);
list.setAdapter(adapter);
}
class AmbilData extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(BeritaUtama.this);
pDialog.setMessage("Mohon tunggu...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
List<NameValuePair> params = new
ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(url_berita,
"GET", params);
Log.i("Ini nilai json ", ">" + json);
try {
string_json = json.getJSONArray("berita");
for (int i = 0; i < string_json.length(); i++) {
JSONObject c = string_json.getJSONObject(i);
String id_berita = c.getString(TAG_ID);
String judul = c.getString(TAG_JUDUL);
String link_image = c.getString(TAG_GAMBAR);
HashMap<String, String> map = new HashMap<String,
String>();
map.put(TAG_ID, id_berita);
map.put(TAG_JUDUL, judul);
map.put(TAG_GAMBAR, link_image);
DaftarBerita.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
SetListViewAdapter(DaftarBerita);
}
});
}
}
}
Selanjutnya, sobat buat file java lagi dengan nama JSONParser.java dan buat kodenya seperti berikut ini
package com.blogsetyaaji.portalberita2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if (method == "POST") {
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} else if (method == "GET") {
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new
InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " +
e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
Buat file java baru dengan nama FileCache.java, buat kodenya seperti berikut
package com.blogsetyaaji.portalberita2;
import java.io.File;
import android.content.Context;
public class FileCache {
private File cacheDir;
public FileCache(Context context) {
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))
cacheDir = new File(android.os.Environment
.getExternalStorageDirectory(), "LazyList");
else
cacheDir = context.getCacheDir();
if (!cacheDir.exists())
cacheDir.mkdirs();
}
public File getFile(String url) {
String filename = String.valueOf(url.hashCode());
File f = new File(cacheDir, filename);
return f;
}
public void clear() {
File[] files = cacheDir.listFiles();
if (files == null)
return;
for (File f : files)
f.delete();
}
}
ImageLoader.java
package com.blogsetyaaji.portalberita2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
public class ImageLoader {
MemoryCache memoryCache = new MemoryCache();
FileCache fileCache;
private Map<ImageView, String> imageViews = Collections
.synchronizedMap(new WeakHashMap<ImageView, String>());
ExecutorService executorService;
public ImageLoader(Context context) {
fileCache = new FileCache(context);
executorService = Executors.newFixedThreadPool(5);
}
final int stub_id = R.drawable.no_image;
public void DisplayImage(String url, ImageView imageView) {
imageViews.put(imageView, url);
Bitmap bitmap = memoryCache.get(url);
if (bitmap != null)
imageView.setImageBitmap(bitmap);
else {
queuePhoto(url, imageView);
imageView.setImageResource(stub_id);
}
}
private void queuePhoto(String url, ImageView imageView) {
PhotoToLoad p = new PhotoToLoad(url, imageView);
executorService.submit(new PhotosLoader(p));
}
private Bitmap getBitmap(String url) {
File f = fileCache.getFile(url);
Bitmap b = decodeFile(f);
if (b != null)
return b;
try {
Bitmap bitmap = null;
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imageUrl
.openConnection();
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is = conn.getInputStream();
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close();
bitmap = decodeFile(f);
return bitmap;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
private Bitmap decodeFile(File f) {
try {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
final int REQUIRED_SIZE = 70;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE
|| height_tmp / 2 < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null,
o2);
} catch (FileNotFoundException e) {
}
return null;
}
private class PhotoToLoad {
public String url;
public ImageView imageView;
public PhotoToLoad(String u, ImageView i) {
url = u;
imageView = i;
}
}
class PhotosLoader implements Runnable {
PhotoToLoad photoToLoad;
PhotosLoader(PhotoToLoad photoToLoad) {
this.photoToLoad = photoToLoad;
}
@Override
public void run() {
if (imageViewReused(photoToLoad))
return;
Bitmap bmp = getBitmap(photoToLoad.url);
memoryCache.put(photoToLoad.url, bmp);
if (imageViewReused(photoToLoad))
return;
BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad);
Activity a = (Activity) photoToLoad.imageView.getContext();
a.runOnUiThread(bd);
}
}
boolean imageViewReused(PhotoToLoad photoToLoad) {
String tag = imageViews.get(photoToLoad.imageView);
if (tag == null || !tag.equals(photoToLoad.url))
return true;
return false;
}
class BitmapDisplayer implements Runnable {
Bitmap bitmap;
PhotoToLoad photoToLoad;
public BitmapDisplayer(Bitmap b, PhotoToLoad p) {
bitmap = b;
photoToLoad = p;
}
public void run() {
if (imageViewReused(photoToLoad))
return;
if (bitmap != null)
photoToLoad.imageView.setImageBitmap(bitmap);
else
photoToLoad.imageView.setImageResource(stub_id);
}
}
public void clearCache() {
memoryCache.clear();
fileCache.clear();
}
}
LazyAdapter.java
package com.blogsetyaaji.portalberita2;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
// public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d)
{
activity = a;
data = d;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// imageLoader = new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup
parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.list_row, null);
TextView id_berita = (TextView) vi.findViewById(R.id.kode);
TextView judul = (TextView) vi.findViewById(R.id.judul);
ImageView thumb_image = (ImageView) vi.findViewById(R.id.gambar);
HashMap<String, String> daftar_berita = new HashMap<String, String>();
daftar_berita = data.get(position);
id_berita.setText(daftar_berita.get(BeritaUtama.TAG_ID));
judul.setText(daftar_berita.get(BeritaUtama.TAG_JUDUL));
// imageLoader.DisplayImage(daftar_berita.get(BeritaUtama.TAG_GAMBAR),thumb_image);
Picasso.with(activity.getApplicationContext())
.load(daftar_berita.get(BeritaUtama.TAG_GAMBAR))
.error(R.drawable.no_image)
.into(thumb_image);
return vi;
}
}
MemoryCache.java
package com.blogsetyaaji.portalberita2;
import java.lang.ref.SoftReference;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import android.graphics.Bitmap;
public class MemoryCache {
private Map<String, SoftReference<Bitmap>> cache = Collections
.synchronizedMap(new HashMap<String, SoftReference<Bitmap>>());
public Bitmap get(String id) {
if (!cache.containsKey(id))
return null;
SoftReference<Bitmap> ref = cache.get(id);
return ref.get();
}
public void put(String id, Bitmap bitmap) {
cache.put(id, new SoftReference<Bitmap>(bitmap));
}
public void clear() {
cache.clear();
}
}
Utils.java
package com.blogsetyaaji.portalberita2;
import java.io.InputStream;
import java.io.OutputStream;
public class Utils {
public static void CopyStream(InputStream is, OutputStream os) {
final int buffer_size = 1024;
try {
byte[] bytes = new byte[buffer_size];
for (;;) {
int count = is.read(bytes, 0, buffer_size);
if (count == -1)
break;
os.write(bytes, 0, count);
}
} catch (Exception ex) {
}
}
}
DetailBerita.java
package com.blogsetyaaji.portalberita2;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.squareup.picasso.Picasso;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class DetailBerita extends Activity {
public ImageLoader imageLoader;
{
imageLoader = new ImageLoader(null);
}
JSONArray string_json = null;
String idberita;
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
public static final String TAG_ID = "id";
public static final String TAG_JUDUL = "judul";
public static final String TAG_ISI = "isi";
public static final String TAG_GAMBAR = "gambar";
private static final String url_detail_berita =
"http://192.168.77.247/portalBerita/detailberita.php";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.single_list_item);
Intent i = getIntent();
idberita = i.getStringExtra(TAG_ID);
Toast.makeText(getApplicationContext(),
"id berita = " + idberita,
Toast.LENGTH_SHORT).show();
new AmbilDetailBerita().execute();
}
class AmbilDetailBerita extends AsyncTask<String, String,
String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(DetailBerita.this);
pDialog.setMessage("Mohon Tunggu ... !");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... params) {
try {
List<NameValuePair> params1 = new
ArrayList<NameValuePair>();
params1.add(new
BasicNameValuePair("id_berita",idberita));
JSONObject json = jsonParser.makeHttpRequest(
url_detail_berita, "GET", params1);
string_json = json.getJSONArray("berita");
runOnUiThread(new Runnable() {
public void run() {
ImageView thumb_image = (ImageView)
findViewById(R.id.imageView1);
TextView judul = (TextView)
findViewById(R.id.judul);
//TextView detail = (TextView)
findViewById(R.id.detail);
TextView isi = (TextView)
findViewById(R.id.content);
try {
// ambil objek member pertama dari JSON Array
JSONObject ar =
string_json.getJSONObject(0);
String judul_d = ar.getString(TAG_JUDUL);
String isi_d = ar.getString(TAG_ISI);
String url_detail_image = ar.getString(TAG_GAMBAR);
judul.setText(judul_d);
isi.setText(isi_d);
// imageLoader.DisplayImage(ar.getString(TAG_GAMBAR),thumb_image);
Picasso.with(getApplicationContext())
.load(url_detail_image)
.error(R.drawable.no_image)
.into(thumb_image);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
}
Tahap pembuatan file java dan library selesai, sekarang sobat buka directory Manifest dan buka AndroidManifest.xml dan tambahkan user permission seperti di bawah ini
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Jika sudah semuanya, silahkan sobat jalankan aplikasinya, maka tampilan dari aplikasi portal beritanya akan seperti berikut ini
Dan ini video tampilan aplikasi portal berita dari tutorial di atas
Silahkan jika sobat ingin melihat dan mendownload contoh project dari tutorial ini, jangan lupa follow dan bintangnya.. 😂
Dan itulah cara membuat aplikasi portal berita android dengan database mySQL dan JSON
Sekian artikel tentang Membuat Aplikasi Portal Berita Android dengan JSON semoga bermanfaat, tetap ikuti Blog Setya Aji untuk tutorial menarik lainya.