android:targetSdkVersion="16"
Secara ajaib Project kita langsung berjalan dengan normal :D. Tetapi mulai SDK Android Kitkat, hal itu sudah tidak dapat dilakukan lagi :( Terpaksa kita harus belajar sesuatu yang lebih rumit untuk menyelesaikan permasalahan ini, oleh sebab itu coba kita selesaikan dengan Aplikasi Android Menggunakan Thread Background Process untuk Mengambil Data dari Web Server HTTP dengan Progress Dialog ini.
Pertama kita buat Project Android di Eclipse seperti biasa. Kemudian buka MainActivity.java, tambahkan kode program berikut ini :
package com.amijaya.android_background_thread_ansync_task;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
// http://cariprogram.blogspot.com
// nuramijaya@gmail.com
Button button1;
ProgressDialog pd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
proses();
}
});
}
public void proses() {
Toast.makeText(getBaseContext(),
"Please wait, connecting to server.",
Toast.LENGTH_SHORT).show();
Thread background = new Thread(new Runnable() {
private final HttpClient Client = new DefaultHttpClient();
private String URL = "http://contohprogram.com/demo/index.php";
// program yang dijalankan ketika thread background berjalan
public void run() {
String SetServerString = "";
try {
HttpGet httpget = new HttpGet(URL);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
SetServerString = Client.execute(httpget, responseHandler);
} catch (Throwable t) {
// jika error
Log.i("Failed", "Thread exception " + t);
}
//mengirim pesan pada handler ketika
//threadMsg(SetServerString);
Message msgObj = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("message", SetServerString);
msgObj.setData(b);
handler.sendMessage(msgObj);
}
/*
private void threadMsg(String msg) {
if (!msg.equals(null) && !msg.equals("")) {
Message msgObj = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("message", msg);
msgObj.setData(b);
handler.sendMessage(msgObj);
}
}
*/
// membuat Handler untuk menerima pesan ketika selesai
private final Handler handler = new Handler() {
public void handleMessage(Message msg) {
String aResponse = msg.getData().getString("message");
if ((null != aResponse) && (aResponse != "")) {
// ALERT MESSAGE
Toast.makeText(
getBaseContext(),
"Response Server : "+aResponse,
Toast.LENGTH_SHORT).show();
}
else
{
// ALERT MESSAGE
Toast.makeText(
getBaseContext(),
"Tidak Bisa Mendapatkan Data dari Server.",
Toast.LENGTH_SHORT).show();
}
pd.dismiss();
button1.setEnabled(true);
}
};
});
// Start Thread
pd = ProgressDialog.show(MainActivity.this, "Please Wait", "Downloading..", true);
button1.setEnabled(false);
background.start(); //memanggil thread background agar start
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Get Data From Server" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.amijaya.android_background_thread_ansync_task" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.amijaya.android_background_thread_ansync_task.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Setelah dijalankan hasilnya seperti ini :
Kemudian jika diklik Tombol Get Server Data maka akan muncul ProgressDialog Loading Please Wait, dan Tombol jadi sementara tidak bisa diklik.
Setelah berhasil mengambil data dari Server Web (HTTP) hasilnya akan ditampilkan, Progress Dialog akan menghilang dan tombol "Get Server Data" juga bisa diklik lagi. Seperti di bawah ini :
Apabila gagal mendapatkan informasi dari Web Server maka akan muncul Peringatan, kemudian ProgressDialog Please Wait juga menghilang, tombol bisa diklik lagi.
Semoga bermanfaat ^_^
Tidak ada komentar:
Posting Komentar