Senin, 15 Juni 2015

Laporan Praktikum 7 | Thread




Percobaan kali ini adalah untuk membuat sebuah thread yang akan menampilkan pesan secara terus menerus dan sebuah bilangan acak. 


Buatlah project baru seperti ketentuan berikut :
Project Name : Thread
Buitl Target : Android 2.2
Application name : Thread
Package name : www.percobaan2.com
Activity : database4
Min SDK :8

Buka file values/string.xml lalu modifikasi sehingga menjadi source berikut ini:




string.xml 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Aplysit - IT Solution Center</string>
    <string name="app_name">Try Thread - www.aplysit.com</string>
</resources>

Selanjutnya main.xml lalu modifikasi codingnya

main.xm

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"  
    android:text="@string/hello"
    />
<Button android:text="Start" 
    android:layout_height="wrap_content"
android:id="@+id/btn_start" 
android:layout_width="wrap_content">
    
</Button>
<Button android:text="Stop" 
    android:layout_height="wrap_content"
android:id="@+id/btn_stop" 
android:layout_width="wrap_content">
    
</Button>
</LinearLayout>
 

Lalu buatlah sebuah file benama mythread.java ketikkan coding dibawah ini

Mythread.java

package www.percobaan2.com;


import android.content.Context;
import android.os.Handler;

public class Mythread {
 public Handler mhandler;
 public showText text;

 public Mythread (Context context, Handler handler){
  mhandler = handler;
 }

 public synchronized void startShowText() {
  if (text == null) { 
   text = new showText();
   text.start(); 
  }
 }

 public synchronized void stopShowText() {
  if (text != null) { 
   text.requestStop();
   text = null;
  }
 }

 private class showText extends Thread {
  private volatile boolean stop = false;
    
  public void run() {
   while ((!stop)){    
    mhandler.obtainMessage(threadsimple.run,"Pesan dari thread" + Math.random()).sendToTarget();
    try {
     sleep(3000);
    }
    catch (Exception e){} 
   }
   if (stop) {
    mhandler.obtainMessage(threadsimple.stop).sendToTarget();
   }
  }
  
  public synchronized void requestStop() {
            stop = true;
  }
 }



Kemudian buatlah sebuah file threadsimple.java lalu masukkan coding dibawah ini: 
  
threadsimple.java

package www.percobaan2.com;

import www.percobaan2.com.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler; 
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class threadsimple extends Activity {
 public static final int run = 1;
 public static final int stop = 2;
 public Mythread thread;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button start = (Button)findViewById(R.id.btn_start);
        start.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    //  TODO Auto-generated method stub 
       thread.startShowText(); 
       System.out.println("run");
   }
        });
        
        Button stop = (Button)findViewById(R.id.btn_stop);
        stop.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    //  TODO Auto-generated method stub
       thread.stopShowText();
       System.out.println("stop");
   } 
        }); 
    }
    public void onStart() {
        super.onStart();
        thread = new Mythread(this, mHandler);
       }
       
       private final Handler mHandler = new Handler() {
           @Override
           public void handleMessage(Message msg) {
               switch (msg.what) {
               case run:
                Toast.makeText(getApplicationContext(), msg.obj.toString(), 2).show();
               break;
               case stop:
                Toast.makeText(getApplicationContext(), "Thread Stop", 2).show();
               break;
               }
           }
       }; 
   }
     



Hasil Runningnya Seperti dibawah ini



Laporan Praktikum 7 | HTTP CONNECTION


Pembahasan selanjutnya adalah menghubungkan aplikasiandroid dengan internet dengan menggunakan http connection, disini anda akan belajar bagaimana membuat aplikasi terhubung dengan internet untuk mendowload gambar dan teks, serta menggunakan rss.

Buatlah project baru seperti ketentuan berikut :

Project Name : HttpURLConnectionA
Buitl Target : Android 2.2
Application name : HttpURLConnectionA
Package name : com.bogotobogo.httpconnecta
Activity : main.xml
Min SDK :8

Buka file layout/main.xml

-main.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical">
    <Button 
    android:id="@+id/Button01" 
    android:text="@string/button01" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content">
    </Button>
    <Button android:id="@+id/Button02" 
    android:layout_height="wrap_content" 
    android:text="@string/button02" 
    android:layout_width="wrap_content">
    </Button>
    <ImageView 
    android:id="@+id/imageview01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:cropToPadding="true" >
    </ImageView>
    <TextView  
    android:id="@+id/textview01"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" />
</LinearLayout>

Kita Download keduan gambar dibawah ini



Setelah itu kita copy kedua gambar icon di folder res, Perhatikan gambar berikut



Pada package src/HttpURLConnectionA, bukaHttpURLConnectionA.java pastikan kodenya seperti berikut

-HttpURLConnectionA.java

package com.bogotobogo.httpconnecta;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

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.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class HttpURLConnectionA extends Activity {
   
    private ProgressDialog progressDialog;   
    private Bitmap bitmap = null;
    private String text = null;
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Button imageBtn = (Button)findViewById(R.id.Button01);
        Button textBtn = (Button)findViewById(R.id.Button02);
       
        imageBtn.setOnClickListener( new OnClickListener() {
            public void onClick(View v) {
                downloadImage("http://www.bogotobogo.com/images/smalltiger.gif");           
            }
        });
       
        textBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                downloadText("http://www.bogotobogo.com/android.html");
            }
        });
    }
   
    private void downloadImage(String urlStr) {
        progressDialog = ProgressDialog.show(this, "", 
                    "Downloading Image from " + urlStr);
        final String url = urlStr;
       
        new Thread() {
            public void run() {
                InputStream in = null;
                Message msg = Message.obtain();
                msg.what = 1;
                try {
                    in = openHttpConnection(url);
                    bitmap = BitmapFactory.decodeStream(in);
                    Bundle b = new Bundle();
                    b.putParcelable("bitmap", bitmap);
                    msg.setData(b);
                    in.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                messageHandler.sendMessage(msg);                   
            }
         }.start();
    }
   
    private void downloadText(String urlStr) {
        progressDialog = ProgressDialog.show(this, "", 
                "Download Text from " + urlStr);
        final String url = urlStr;
       
        new Thread () {
            public void run() {
                int BUFFER_SIZE = 2000;
                InputStream in = null;
                Message msg = Message.obtain();
                msg.what=2;
                try {
                    in = openHttpConnection(url);
                   
                    InputStreamReader isr = new InputStreamReader(in);
                    int charRead;
                      text = "";
                      char[] inputBuffer = new char[BUFFER_SIZE];

                          while ((charRead = isr.read(inputBuffer))>0)
                          {                   
                              String readString = 
                                  String.copyValueOf(inputBuffer, 0, charRead);                   
                              text += readString;
                              inputBuffer = new char[BUFFER_SIZE];
                          }
                         Bundle b = new Bundle();
                            b.putString("text", text);
                            msg.setData(b);
                          in.close();
                     
                }catch (IOException e2) {
                    e2.printStackTrace();
                }
                messageHandler.sendMessage(msg);
            }
        }.start();   
    }
   
    private InputStream openHttpConnection(String urlStr) {
        InputStream in = null;
        int resCode = -1;
       
        try {
            URL url = new URL(urlStr);
            URLConnection urlConn = url.openConnection();
           
            if (!(urlConn instanceof HttpURLConnection)) {
                throw new IOException ("URL is not an Http URL");
            }
           
            HttpURLConnection httpConn = (HttpURLConnection)urlConn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect(); 

            resCode = httpConn.getResponseCode();                
            if (resCode == HttpURLConnection.HTTP_OK) {
                in = httpConn.getInputStream();                                
            }        
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return in;
    }
   
    private Handler messageHandler = new Handler() {
       
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 1:
                ImageView img = (ImageView) findViewById(R.id.imageview01);
                img.setImageBitmap((Bitmap)(msg.getData().getParcelable("bitmap")));
                break;
            case 2:
                TextView text = (TextView) findViewById(R.id.textview01);
                text.setText(msg.getData().getString("text"));
                break;
            }
            progressDialog.dismiss();
        }
    };
}

Untuk Mengatasi Terjadi Force Close, Pada package src/AndroidManifest, buka AndroidManifest.xml pastikan kodenya seperti berikut 

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      android:versionCode="1"
      android:versionName="1.0" package="com.bogotobogo.httpconnecta">
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".HttpURLConnectionA"
                  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 itu Run dengan shourcut CTRL+F11 atau klik Kanan package > Runa As > Android Projeck. Lihat Hasilnya Seperti Dibawah Ini



Smoga Bermanfaat