İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

Thread Kullanarak HTTP Connection Kuran Bir Midlet Örneği

Bu midlet ile bir server'a HTTP Connection kuruyor ve cevab alıyoruz. Ancak bağlanma işlemi bir thread tarafından yapılmaktadır. Bir connection kurarken thread kullanılması doğru bir karardır. Bağlanma belirli bir süre sürer. Bu süre içinde programı bekletmek gerekmez. Connection kurulması sırasında program başka işlemler gerçekleştirebilir. Connection'dan size cevap geldiğinde gelen cevaba göre işlem gerçekleştirebilirsiniz.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.io.*;
  2 import java.util.*;
  3 import java.io.*;
  4 public class ConnectionManager implements Runnable{
  5     private String[][] theParameters; 
  6     private Thread theThread;
  7     private ResponceListener theListener;
  8     private String theURL;
  9     public ConnectionManager(String URL,String[][] parameters,ResponceListener listener){
 10         theURL=URL;  
 11         theParameters=parameters;
 12         theListener=listener;
 13         theThread=new Thread(this);
 14     }
 15     public void connect(){
 16         theThread.start();
 17     }
 18     public void run(){
 19         try{
 20             String responceString=openConnection();
 21              theListener.setResponce(responceString);
 22         }catch(Exception e){
 23             theListener.handleException(e);
 24         }
 25     }
 26     private String openConnection() throws IOException{
 27         String query=combineParameters();
 28         String aUrl=theURL+"?"+query;
 29         HttpConnection connecton=(HttpConnection)Connector.open(aUrl);
 30         InputStream is=connecton.openInputStream();
 31         StringBuffer buffer=new StringBuffer();
 32         int ch;
 33         while ((ch=is.read())!=-1){
 34             buffer.append((char)ch);
 35         }
 36         is.close();
 37         connecton.close();
 38         return buffer.toString();
 39     }    
 40     private String combineParameters(){
 41         StringBuffer buffer=new StringBuffer();
 42         for(int i=0;i<theParameters.length;i++){
 43             buffer.append(theParameters[i][0]);
 44             buffer.append("=");
 45             buffer.append(theParameters[i][1]);
 46             buffer.append("&");
 47         }
 48         return buffer.toString();
 49     }    
 50     public static interface ResponceListener{
 51         public void setResponce(String responce);
 52         public void handleException(Exception e);
 53     }
 54 }

ConnectionManager class'ının kurucusu bağlanılacak adresi (http://www.bilmemne.com/test.jsp gibi), parametre,value çiftlerini (name=ali,tel=032345656 gibi) ve connection'a gelen cevabı dinleyecek bir nesneyi ister.

ResponceListener bir interface'dir ve gelen cevabı isteyen bir nesneni bu interface implements etmesi gerekir. Örneğin aşağıdaki Test class'ı bir connection kuruyor ve gelen cevabı system out'a basıyor.

...
class Test implements ConnectionManager.ResponceListener{
....
public void connect(){
        String[][] parameters=new String[2][2];
        parameters[0][0]="name";
        parameters[0][1]=ali;
        parameters[1][0]="tel";
        parameters[1][1]="05335465678";
        ConnectionManager manager=new ConnectionManager("http://www.test.com/test.jsp",parameters,this);
        manager.connect();
}
....
public void setResponce(String responce){        
	System.out.println(responce);
}
public void handleException(Exception e){
	e.printStackTrace();
}
....

manager.connect() işlemi ile connection kuruluyor. Cevap gedliğinde setResponce(String responce) methodu çağrılıyor. Böylece gelen cevaba göre Test class'ı işlem gerçekletirebilir.

ConnectionManager class'ının connect methodu çağrıldığında thread başlatılır. run method'u içinde görüldüğü gibi

String responceString=openConnection();

openConnection methodu çağrılarak cevap alınır. Ve alınan cevap

theListener.setResponce(responceString);

ile cevabı dinlemek isteyen nesneye verilir.

openConnection methodu önce parametreleri birleştirir (name=ali&tel=053334545656 şeklinde). Daha sonra bir HTTPConnection yaratır ve bu connection'dan bir InputStream yaratılır. Bu InputStream karakter karakter okunarak bir StringBuffer'a eklenir. StringBuffer'ın toString methodu ile connection'a gelen cevap alınmış olur.

private String openConnection() throws IOException{
	String query=combineParameters();
	String aUrl=theURL+"?"+query;
	HttpConnection connecton=(HttpConnection)Connector.open(aUrl);
	InputStream is=connecton.openInputStream();
	StringBuffer buffer=new StringBuffer();
	int ch;
	while ((ch=is.read())!=-1){
		buffer.append((char)ch);
	}
	is.close();
	connecton.close();
	return buffer.toString();
}

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır