10 Şubat 2016 Çarşamba

Tüm Gazeteler Android Uygulamam

Merhaba arkadaşlar,

Üniversite yıllarında başladığım android geliştiriciliğine, iş hayatına başladıktan sonra uzun ara vermiştim ama tekrardan boş zamanlarımda ilgilenmeye başladım. Basit uygulamalar belki ama uğraşmak beni mutlu ediyor. 



Ekonomi, spor, teknoloji ve gündeme dair alanlarda çıkarılan gazetelere tekbir uygulamadan erişebileceğiniz, beğendiğiniz haberleri arkadaşlarınızla anında paylaşabileceğiniz, yeni gazete içeriği ekleyebileceğiniz veya uygulamada ilgilenmediğiniz gazete içeriğini silebileceğiniz. Sonrasında tekrar ulaşmak istediğiniz haber kaynağını favorilerinize ekleyebileceğiniz kullanışlı bir uygulama olduğunu düşündüğüm Gazete Oku uygulamasını sizlerle paylaşmak istedim. Uygulamayı indirip denerseniz ve geri bildirimlerinizi ve yorumlarınızı bekliyorum. :)

Uygulamaya Buradan Erişebilirsiniz
Gazete Oku



30 Ekim 2014 Perşembe

Android Web Servis Kullanıcı Adı ve Parola Ayarlama


Merhaba arkadaşlar,

Bu yazımda daha önce yayınlamış olduğum Android te web servis kullanımına ilişkin ek bir ilave yapacağım. Eğer servisimizde kullanıcı adı ve parola erişim kısıtı varsa bu durumda servisimizde SOAP header’ına bu parametreleri set etmemiz gerekecektir. Eğer Android te web servis kullanımı ile alakalı yazımı okumamışsanız buradan okumanızı tavsiye ederim çünkü kodları oradaki yapı üzerinden vereceğim.

Servis request değerimi oluşturup SoapSerializationEnvelope nesneme set ederken burada headerOut fonksiyonunu kullanarak kullanıcı adı ve parola değerlerimi set ediyorum. Bunun için önceki yazımda WebServiceCall.java sınıfımız içerisinde SetEnvelop() metodumda şu kodları ekliyoruz.


    protected void SetEnvelope() {
         
        try {
             
            // Creating SOAP envelope          
            envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             
            //You can comment that line if your web service is not .NET one.
            envelope.dotNet = true;
            
            //header'a kullanıcı adı ve parola değerlerini set et
            envelope.headerOut = new Element[1]; 
            envelope.headerOut[0] = buildAuthHeader();
            
            envelope.setOutputSoapObject(request);
            androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.debug = true;
             
        } catch (Exception e) {
            System.out.println("Soap Exception---->>>" + e.toString());   
        }
    }
    
    
    private Element buildAuthHeader() {
        Element h = new Element().createElement(NAMESPACE, "AuthHeader");
        Element username = new Element().createElement(NAMESPACE, "Username");
        username.addChild(Node.TEXT, USERNAME);
        h.addChild(Node.ELEMENT, username);
        Element pass = new Element().createElement(NAMESPACE, "Password");
        pass.addChild(Node.TEXT, PASSWORD);
        h.addChild(Node.ELEMENT, pass);

        return h;
    }

Umarım faydalı olur, yardıma ihtiyacınız olduğunda yardımcı olabilirim.

Android Web Servis Kullanımı


Merhaba arkadaşlar, .net web servislerinin android te nasıl kullanılacağından bahsedeceğim.  Bunun için http://www.webservicex.net/ sitesinde sunulan ağırlık birimleri arası dönüşüm yapan basit bir servisi kullanacağız. Bu servis .net ile yazılmış web servisidir. Bunu bilmekte fayda var çünkü java ile yazılmış servislerin kullanımı biraz daha farklı.

Öncelikle Android de web servislerini kullanabilmemiz için ksoap2 kütüphanesine ihtiyaç var. Bu kütüphaneyi buradan indirerek projemize import ediyoruz. Bunun için önce indirdiğimiz .jar dosyamızı projemizde libs klasörünün altına kopyalayalım, ardından projemizin üzerine gelerek sağ tıklayıp Build Path > Add External Archives.. seçeneğini seçiyoruz. İndirdiğimiz ksopa2 jar’ını göstererek ekliyoruz.



Aşağıda kullanacağımız servisin açıklamalarını verdim. Uygulamada kullanacağımız servis değişkenleri şu şekilde.





NAMESPACE = “http://www.webserviceX.NET/
URL = “http://www.webservicex.net/ConvertWeight.asmx”
METHOD_NAME = “ConvertWeight”
SOAP_ACTION = NAMESPACE + METHOD_NAME 



Şimdi servisi uygulamamızda nasıl kullanacağımıza geçebiliriz. Ben basit bir uygulama ile servisten dönen cevabı bir text içerisinde göstereceğim. Siz kendi uygulamanıza göre uyarlarsınız. Proje structure olarak resimde verildiği şekliyle.















1) Öncelikle layout’umuzu oluşturalım. Ben servise parametre olarak geçeceğimiz değerleri alacağım 3 textbox ve servis çağrısı yapacağımız bir buton kullanıyorum ve servis cevabını gösterebileceğim bir label ekliyorum. 




    

    

    

    

    

    

    


2) Servis bağlantımı oluşturacağım WebServiceCall sınıfımı oluşturuyorum.  Bu sınıf içerisinde Soap requestimi oluşturuyor varsa gerekli request parametrelerimi, servis kullanıcı adı ve parolamı set ediyorum. Bu servisimizde kullanıcı adı ve parola istemediği için SOAP header 'ına müdahale etmedik. Ancak başka yazımda ele aldım. Buradan (Servis Kullanıcı Adı ve Parola Set Etme) servis header parametrelerinin nasıl set edileceğine ulaşabilirsiniz.


package com.ahmetbz.usingwebservices;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;

public class WebServiceCall {

    String NAMESPACE = "http://www.webserviceX.NET/";
    private String URL = "http://www.webservicex.net/ConvertWeight.asmx";
    String METHOD_NAME = "ConvertWeight";
    String SOAP_ACTION;
    SoapObject request = null, objMessages = null;
    SoapSerializationEnvelope envelope;
    AndroidHttpTransport androidHttpTransport;
     
    WebServiceCall() {
    }

    protected void SetEnvelope() {
         
        try {
             
            // Creating SOAP envelope          
            envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             
            //You can comment that line if your web service is not .NET one.
            envelope.dotNet = true;
            
            envelope.setOutputSoapObject(request);
            androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.debug = true;
             
        } catch (Exception e) {
            System.out.println("Soap Exception---->>>" + e.toString());   
        }
    }
    
    // MethodName variable is define for which webservice function  will call
    public String getConvertedWeight(String weight, String fromUnit, String toUnit)
      {
         
        try {
            SOAP_ACTION = NAMESPACE + METHOD_NAME;
             
            //Adding values to request object
            request = new SoapObject(NAMESPACE, METHOD_NAME);
            

            //Adding Double value to request object
            PropertyInfo weightProp =new PropertyInfo();
            weightProp.setName("Weight");
            weightProp.setValue(weight);
            weightProp.setType(double.class);
            request.addProperty(weightProp);
             
            //Adding String value to request object
            request.addProperty("FromUnit", "" + fromUnit);
            request.addProperty("ToUnit", "" + toUnit);
            
            SetEnvelope();
             
            try {
                 
                //SOAP calling webservice
                androidHttpTransport.call(SOAP_ACTION, envelope);
                 
                //Got Webservice response
                SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
 
                return response.toString();
                 
            } catch (Exception e) {
                // TODO: handle exception
                return e.toString();
            }
        } catch (Exception e) {
            // TODO: handle exception
            return e.toString();
        }
 
    }

}


3) Butona tıklayınca servis çağrısı yapacağım DotNetWebServiceActivity sınıfımda hazırladığım layottan servise göndereceğim parametreleri alıyorum ve servis çağrısını yaparak dönen değeri labelda gösteriyorum.

package com.ahmetbz.usingwebservices;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class DotNetWebServiceActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.mainlayout);
          
         final Button webserviceCallButton = (Button) findViewById(R.id.callServiceButton);
         final EditText weightEditText = (EditText) findViewById(R.id.weightEditText);
         final EditText fromUnitEditText = (EditText) findViewById(R.id.fromUnitEditText);
         final EditText toUnitEditText = (EditText) findViewById(R.id.toUnitEditText);
         final TextView webserviceResponse = (TextView) findViewById(R.id.serviceResponseTextView);
          
         webserviceCallButton.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
                  
                 webserviceResponse.setText("Requesting to server .....");
                  
                 //Create Webservice class object
                 WebServiceCall service = new WebServiceCall();
                  
                 // Initialize variables
                 String weight   = weightEditText.getText().toString();
                 String fromUnit = fromUnitEditText.getText().toString();
                 String toUnit   = toUnitEditText.getText().toString();
                  
                 //Call Webservice class method and pass values and get response
                 String aResponse = service.getConvertedWeight(weight, fromUnit, toUnit);  
                     
                 Log.i("AndroidExampleOutput", "----"+aResponse);
                  
                 webserviceResponse.setText("Service Response : "+aResponse);
             }
         });
       
 }

}


4) AndroidManifest.xml dosyamızda Activity’i kaydetmeyi ve internet iznini vermeyi unutmayalım.



    
 
    
        
            
                
                
            
        
    
 






Evet arkadaşlar, uygulamaızı çalıştırıp ilgili değerleri girdiğimizde sonucun döndüğünü görebiliriz.

Veritabanı Tablo index Oluşturma / Sql Index


Veriler disk tabanlı belleklere depolanırken bloklar halinde depolanır. Disk blokları genelde bağlı listeler gibi yapılandırılmıştır; her ikisi de verinin tutulduğu kısım ve bir sonraki düğüme gösteren pointer kısmından oluşur ve her ikiside ardarda depolanmak zorunda değildir.

Sıralama yapılmamış bir alanda arama yapmak Lineer Arama yapmayı gerektirir, bu da N/2 blok erişimi gerektirir. Buradaki N tablonun disk üzerinde bulunduğu blok sayısıdır. Eğer bu alan anahtar olmayan bir alan ise arama N tane blok erişimi gerektirir.
Oysa sıralanmış bir alan olsaydı Binary Arama kullanılabilirdi, bu da log2 N blok erişimi gerektirir. Bununla birlikte anahtar olmayan alan sıralanmış ise tablonun geri kalanı duplicate değerleri bulmak için aranmaz. Çünkü alan sıralanmış olduğu için aranan değerden farklı bir değere erişildiğinde arama bitmiş demektir. Böylece performans önemli ölçüde artar.

İndex Nedir, Neden Kullanılır

Bir index, veri tabanı ortamında bir tablo ya da bir view gibi bir nesnedir ve ilişkili olarak kullanıldığı tablo ya da view'deki satırların, index alanı olarak kullanılan kolondaki verilere göre sıralanmış biçimde işlenme sokulmasını sağlar.

Bir tablo, indekslenmiş ise , bu tablo içinde gerçekleştirilecek bir arama ya da koşullu listeleme işlemi çok daha hızlı biçimde gerçekleştirecektir.

Index Oluşturma

      CREATE INDEX index adı
      ON tabloadı (kolonadı 1,kolonadı 2,....,kolonadı n );

Index artan (ascending) ya da azalan (decending) şeklinde olabilir. Artan, alfabetik olarak A’dan Z’ye nümerik olarak küçükten büyüğe şeklindedir. Azalan ise bunun tersidir. Hiçbir özel sözcük kullanılmazsa index artan sayılır ya da alan adının yanında bir boşluktan sonra ASC sözcüğü kullanılırsa bu alana göre artan sıralama yapılacak demektir.

Herhangi bir alanın adının yanında DESC sözcüğünün kullanılması ise index azalan olacağını gösterir. Komutun yazılış biçiminden anlaşılacağı gibi, aynı anda, birden çok alana göre index de yapılabilir.

Tek Bir Alana Göre Artan Sırada Index

İşletmede çalışan personeli maaşlarına göre artan sırada listelemek istersek, maas alanına göre bir index oluşturmalıyız.

     CREATE INDEX pers_maas
      ON Personel (maas);

Personel tablosunu listelersek personeller maaşlarına göre sıralı liste olarak gelecektir.

Tek Bir Alana Göre Artan Sırada Index 

    CREATE INDEX pers_maas
    ON Personel (maas DESC);

Birden Fazla Alana Göre Index

İşletmedeki personelin öncelikle adlarına göre, aynı ad da olanların soyadlarına göre, hem adı hem soyadı aynı olanların maaşlarına göre sıralanmış olarak listelenmesi istenirse aşağıdaki komut kullanılmalıdır:

 CREATE INDEX p_ad_soy_m
 ON Personel (ad,soyad,maas); 

Mevcut Bir Index’in Silinmesi 

Bir tablo üzerinde tanımlanmış herhangi bir indeks , o tablonun veri tabanından silinmesi ile otomatik olarak silinecektir. Tablo silinmeksizin , o tablo üzerinde oluşturulan indeksin silinmesi içinse DROP INDEX komutu kullnılmalıdır.

   DROP INDEX index_adi ;

29 Ocak 2014 Çarşamba

DWR Kullanımı Örneği (Direct Web Remoting) / How to use Dwr in Java

Bu yazımda DWR (Direct Web Remoting ) ‘dan bahsetmeye çalışacağım.

AJAX'a web uygulamalarımızda çok sık ihtiyaç duymaktayız. Peki nedir bu AJAX;
Aslinda ajax HTML / CSS/ DOM / JavaScript XML / XML/HttpRequest gibi birçok bileşenin birleştirlmesiyle geliştirilmiş bir teknolojidir. Adından da anlaşılacağı üzere Asenkron bir işletim söz konusu olduğundan şöyle bir fayda sağlamaktadır; güncellemelerde sayfanın değil istenilen kısımların sunucuya gidip gelmesidir. DWR' da aslında bir AJAX framework’ü olduğundan AJAX'a değinmek istedim önce.

DWR iki ana bölümden oluşmakta;
  • İstemciden gelecek request'leri işleyen ve istemciye tekrar bir cevap dönen Java Servlet'leri.
  • Request'leri gönderen ve servlet’lerden dönen responslarla sayfayı güncelleyen JavaScript parçalarından oluşur diyebiliriz.

Aşağıdaki resimde işleyişi anlatma adına güzel olmuş.

Şimdi de DWR'ı nasıl kullanacağımızı adım adım anlatmaya çalışayım;

1)  Önce bir Dynamic Web Project oluşturuyorsunuz.

2)  DWR Jar'ını sayfasından indirerek WEB-INF altında lib klasörünün altına koyuyoruz.Eğer lib klasörü yoksa bir tane oluşturabiliriz. Yalnız dwr.xml de kullanacağımız versiyonla jar'ın versiyon uyumluluğu önemli. Buna dikkat edelim. Ben dwr 2 kullanacağım bu örnekte.

3)  Aşağıdaki kodları web.xml'imize ekliyoruz. Bu yukarıda bahsettimiz DWR'ın ilk kısmına karşılık gelmekte aslında. Burada DwrServlet’imizi tanımlıyoruz. 

    
        dwr-invoker
        org.directwebremoting.servlet.DwrServlet
        
            activeReverseAjaxEnabled
            true
        
        
            debug
            true
        
         
             crossDomainSessionSecurity 
             false 
         
         
             allowScriptTagRemoting 
             true 
        
        1
    

    
        dwr-invoker
        /dwr/*
    
4)  web.xml ile aynı dizinde bulunan bir dwr.xml dosyası oluşturuyoruz. Web.xml'e eklediğimiz servlet name (dwr-invoker)kısmı aslında bu .xml’inde ismini belirlemekte. Buna dikkat edelim. Aşağıdaki kodları dwr.xml'e ekleyelim. Dwr DwrEngine isimli java clasımızı .js uzantılı bir JavaScript'e dönüştürecek.


 
   
     
     
   
 
5)  dwr.xml'de kullandığımız DwrEngine adlı  java clasımızı oluşturuyoruz.


package com.ahmetboz.dwr;

/**
 *
 * @author ahmet.boz
 */
public class DwrEngine {
       
    public DwrEngine(){}
    
    public String deneme() {
        return "Hello";
    }
}

Şu durumda dwr'ı kullanabilir durumdayız. Uygulamamızı çalıştırıp
http://localhost:8080/[YOUR-WEBAPP]/dwr/    adresini yazarsanız dwr.xml'de tanımladığımız class ve metodların listesini görebiliriz.




6)  Son olarak arayüzümüzü oluşturuyoruz ve dwr'ı deniyoruz.. Ben basit bir şekilde DwrEngine'den gelen mesajı alert ile ekrana bastırıyorum.


<%@ page contentType="text/html; charset=UTF-8"%>

<%@ page contentType="text/html; charset=UTF-8"%>


    
        
        
        

        
        
    
    
        
DWR Say Hello

Uygulamamızı çaılıştırıp deniyoruz.

İlerleyen yazılarımda Dwr'ı Spring bean'leriyle nasıl kullanırız buna değinmeğe çalışacağım.Kolay gelsin.