<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>F. Oğuz ÖZKEROĞLU</title>
	<atom:link href="http://www.oguzozkeroglu.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oguzozkeroglu.com</link>
	<description>Web günlüğü</description>
	<lastBuildDate>Sun, 29 Apr 2012 21:35:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>C# .Net :: Email Regex</title>
		<link>http://www.oguzozkeroglu.com/c-net-email-regex/</link>
		<comments>http://www.oguzozkeroglu.com/c-net-email-regex/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 21:35:39 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[cSharp]]></category>
		<category><![CDATA[windows phone]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[email validation]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[regular expression]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=467</guid>
		<description><![CDATA[Java :: Email Regex yazımdaki Java için kullandığım email doğrulama metodu bu sefer de bir Windows Phone 7 uygulamasında lazım oldu. Aynı işlemin(C#).net kodu için aşağıdaki kullanılabilir: Bu haliyle benim işimi görüyor, çöplükte bu da bulunsun.. Kaynak: codeproject.com]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oguzozkeroglu.com/java-email-regex/">Java :: Email Regex</a> yazımdaki Java için kullandığım email doğrulama metodu bu sefer de bir Windows Phone 7 uygulamasında lazım oldu. Aynı işlemin(C#).net kodu için aşağıdaki kullanılabilir:</p>
<pre class="brush: cpp; title: ; notranslate">
        public static bool isValidEmail(string email)
        {
            const string matchEmailPattern = @&quot;^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@&quot;
           + @&quot;((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.&quot;
           + @&quot;([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.&quot;
           + @&quot;([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.&quot;
           + @&quot;([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|&quot;
           + @&quot;([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$&quot;;
            if (email != null) return Regex.IsMatch(email, matchEmailPattern);
            else return false;
        }
</pre>
<p>Bu haliyle benim işimi görüyor, çöplükte bu da bulunsun..<br />
Kaynak: codeproject.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/c-net-email-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>İETT Hakkında</title>
		<link>http://www.oguzozkeroglu.com/iett-hakkinda/</link>
		<comments>http://www.oguzozkeroglu.com/iett-hakkinda/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 17:23:28 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[eleştiri]]></category>
		<category><![CDATA[hıyar]]></category>
		<category><![CDATA[iett]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=453</guid>
		<description><![CDATA[Bu yazı yazıldığı sırada sitenizde son güncelleme tarihinin bugünün tarihi ile aynı olduğu şu listeyi yayınlayan, otobüs filosundaki sayılar ve markalar ile öğünen, vatandaşa harika bir hizmet sunduğunuzu düşünen sayın İETT yetkilileri; pazar günü bile en geniş aralığa sahip iki otobüsün kalkış saatlerinin 40 dakikayı geçmediği bir hat üzerinde onlarca vatandaşı 1 °C havada 1 [...]]]></description>
			<content:encoded><![CDATA[<p>Bu yazı yazıldığı sırada sitenizde son güncelleme tarihinin bugünün tarihi ile aynı olduğu <a href="http://www.oguzozkeroglu.com/images/iett2.png" target="_blank">şu listeyi</a> yayınlayan, otobüs filosundaki sayılar ve markalar ile öğünen, vatandaşa harika bir hizmet sunduğunuzu düşünen sayın İETT yetkilileri; pazar günü bile en geniş aralığa sahip iki otobüsün kalkış saatlerinin 40 dakikayı geçmediği bir hat üzerinde onlarca vatandaşı 1 °C havada 1 saat + 10 dakika (evet bildiğiniz 70 dakika) beklettiğiniz ve ben aldığınız o kadar hayır duasının! yeterli olmadığını düşündüğüm için hepinize şunlardan birer tane hediye ediyorum.<br />
<center><img src="http://www.oguzozkeroglu.com/images/cucumbers.jpg" alt="hıyar" title="hıyar" /></center><br />
Tarafıma bizzat başvurduğunuz takdirde herhangi bir belgeye ihtiyacınız olmadan hediyenizi teslim alabilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/iett-hakkinda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android :: Ksoap2 Kullanarak Webservislere Erişme</title>
		<link>http://www.oguzozkeroglu.com/android-ksoap2-kullanarak-webservislere-erisme/</link>
		<comments>http://www.oguzozkeroglu.com/android-ksoap2-kullanarak-webservislere-erisme/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 16:22:35 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[android sdk]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[ksoap2]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservis]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=448</guid>
		<description><![CDATA[İçerik: Android üzerinden webservislere erişim, gelen yanıtın parse edilmesi ve kullanılması. Bu seferki yazım bir yıldan fazla zamandır sıkça kullandığım, Android üzerinden SOAP [0] webservislerine bağlanma ve kullanma konusunda kolaylıklar sağlayan ksoap2 [1] hakkında olacak. E-mail doğrulaması yapan public bir webservisi kullanan örnek bir uygulama üzerinden gideceğim. Kullanacağım webservisi basit göründüğü için aşağıdaki olarak seçtim [...]]]></description>
			<content:encoded><![CDATA[<p>İçerik: <b>Android üzerinden webservislere erişim, gelen yanıtın parse edilmesi ve kullanılması.</b><br />
Bu seferki yazım bir yıldan fazla zamandır sıkça kullandığım, Android üzerinden SOAP [0] webservislerine bağlanma ve kullanma konusunda kolaylıklar sağlayan ksoap2 [1] hakkında olacak. E-mail doğrulaması yapan public bir webservisi kullanan örnek bir uygulama üzerinden gideceğim.<br />
<br />
Kullanacağım webservisi basit göründüğü için aşağıdaki olarak seçtim (google&#8217;da karşıma ilk çıkanlardan biri):</p>
<p>http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?op=VerifyEmail</p>
<p>Metodların tam listesi:</p>
<p>http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx</p>
<p>Ve servis tanımlaması:</p>
<p>http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?WSDL</p>
<p>Kullanacağımız metoddan bahsedecek olursak, bir email ve lisans anahtarını parametre olarak alıyor, arka planda kontrolünü yapıyor ve işlem hakkında 4 farklı bilgiyi bize veriyor (ResponseText, ResponseCode, LastMailServer, GoodEmail). Yapmak istediğim uygulama da verdiğim email ve lisans anahtarı bilgilerini bu servise gönderen ve gelen yanıtı aldıktan sonra parse edip, her bir bilgiyi ekranda ayrı ayrı gösterecek.<br />
<br />
Servisi test etmek için url&#8217;de bir arayüz var ama böyle bir arayüze sahip olmayan servisler için test aracı olarak soapUI [2] ya da SOAPSonar [3] kullanılabilir. SOAPSonar Personal Edition&#8217;da test ettiğimde gönderilen istek aşağıdaki gibi oldu:<br />
</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;
			   xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
			   xmlns:s=&quot;http://www.w3.org/2001/XMLSchema&quot;
			   xmlns:tns=&quot;http://ws.cdyne.com/&quot;&gt;
  &lt;soap:Body&gt;
    &lt;tns:VerifyEmail&gt;
      &lt;tns:email&gt;oguzozkeroglu@hotmail.com&lt;/tns:email&gt;
      &lt;tns:LicenseKey&gt;test&lt;/tns:LicenseKey&gt;
    &lt;/tns:VerifyEmail&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;
</pre>
<p>
Aldığım yanıt ise aşağıdaki gibi:<br />
</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;
			   xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
			   xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
  &lt;soap:Body&gt;
    &lt;VerifyEmailResponse xmlns=&quot;http://ws.cdyne.com/&quot;&gt;
      &lt;VerifyEmailResult&gt;
        &lt;ResponseText&gt;Verified Email Address&lt;/ResponseText&gt;
        &lt;ResponseCode&gt;2&lt;/ResponseCode&gt;
        &lt;LastMailServer&gt;mx2.hotmail.com&lt;/LastMailServer&gt;
        &lt;GoodEmail&gt;true&lt;/GoodEmail&gt;
      &lt;/VerifyEmailResult&gt;
    &lt;/VerifyEmailResponse&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;
</pre>
<p>
Kullanmadığım mail adresimin verified olmasını görmek sevindirdi açıkçası :) Şimdi aynı işlemleri bir Android projesi ile yapalım ve gelen yanıtı anlamlı hale getirip XML taglari arasındaki bilgileri birbirinden ayırıp ekranda gösterelim.<br />
<br />
Öncelikle Eclipse&#8217;te bir Android projesi yaratalım. Kullanacağımız hiçbir metod ve özellik android-4 üzeri bir sürüm gerektirmiyor, o yüzden minimum ve target sdk seçenekleri 1.6 tutulabilir (en yenisi olsun diye kasmaya gerek yok :)<br />
<br />
Yapacağımız ilk iş Manifest dosyasına internete erişim iznini eklemek olursa sonradan gerçekleşmesi muhtemel bir hatayı (java.net.SocketException) en baştan önlemiş oluruz. Eğer uygulamamız internet ile iletişime geçecekse aşağıdaki izni Manifest dosyamıza eklemiş olmamız gerekiyor.<br />
</p>
<pre class="brush: xml; title: ; notranslate">
&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
</pre>
<p>
Şimdi de gelen yanıttaki bilgileri tutacağımız nesne için bir class yazalım. Gelen XML&#8217;deki ada göre bir isimlendirme yaptım, o kısım için daha kolay akılda kalacak ya da daha anlamlı bir isim seçilebilir.<br />
</p>
<pre class="brush: java; title: ; notranslate">
public class VerifyEmailResult {
	private String responseText;
	private int responseCode;
	private String lastMailServer;
	private boolean goodEmail;

	public VerifyEmailResult() {
		super();
	}

	public VerifyEmailResult(String responseText, int responseCode,
			String lastMailServer, boolean goodEmail) {
		super();
		this.responseText = responseText;
		this.responseCode = responseCode;
		this.lastMailServer = lastMailServer;
		this.goodEmail = goodEmail;
	}

	public String getResponseText() {
		return responseText;
	}

	public void setResponseText(String responseText) {
		this.responseText = responseText;
	}

	public int getResponseCode() {
		return responseCode;
	}

	public void setResponseCode(int responseCode) {
		this.responseCode = responseCode;
	}

	public String getLastMailServer() {
		return lastMailServer;
	}

	public void setLastMailServer(String lastMailServer) {
		this.lastMailServer = lastMailServer;
	}

	public boolean isGoodEmail() {
		return goodEmail;
	}

	public void setGoodEmail(boolean goodEmail) {
		this.goodEmail = goodEmail;
	}

	@Override
	public String toString() {
		return &quot;VerifyEmailResult [responseText=&quot; + responseText
				+ &quot;, responseCode=&quot; + responseCode + &quot;, lastMailServer=&quot;
				+ lastMailServer + &quot;, goodEmail=&quot; + goodEmail + &quot;]&quot;;
	}
}
</pre>
<p>
Daha sonra bu classtan oluşturduğumuz nesnenin içini dolduracak, aslında yapmamız gereken işin çoğunu yapacak (webservis ile bağlantı kurup, parametrelerimizi karşıya gönderecek, ordan yanıt bekleyip aldığı yanıtı parse edip sonrasında bilgileri istediğimiz formatta bize verecek) olan classı yazalım.<br />
</p>
<pre class="brush: java; title: ; notranslate">
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class EmailValidator {
	private static final String METHOD_NAME = &quot;VerifyEmail&quot;;
	private static final String NAMESPACE = &quot;http://ws.cdyne.com/&quot;;
	private static final String SOAP_ACTION = &quot;http://ws.cdyne.com/VerifyEmail&quot;;
	private static final String URL = &quot;http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx&quot;;

	public static VerifyEmailResult verifyEmail (String eMail, String licenseKey) {
		VerifyEmailResult object = new VerifyEmailResult();

		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		request.addProperty(&quot;email&quot;, eMail);
		request.addProperty(&quot;LicenseKey&quot;, licenseKey);

		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		envelope.dotNet = true;
		envelope.setOutputSoapObject(request);

		HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
		androidHttpTransport.debug = true;

		try {
			androidHttpTransport.call(SOAP_ACTION, envelope);
			SoapObject response = (SoapObject) envelope.getResponse();

			if (response.hasProperty(&quot;ResponseText&quot;)) {
				if (response.getPropertyAsString(&quot;ResponseText&quot;) == null) {
					object.setResponseText(null);
				} else {
					object.setResponseText(response.getPropertyAsString(&quot;ResponseText&quot;));
				}
			}

			if (response.hasProperty(&quot;ResponseCode&quot;)) {
				if (response.getPropertyAsString(&quot;ResponseCode&quot;) == null) {
					object.setResponseCode(-1);
				} else {
					object.setResponseCode(Integer.parseInt(response.getPropertyAsString(&quot;ResponseCode&quot;)));
				}
			}

			if (response.hasProperty(&quot;LastMailServer&quot;)) {
				if (response.getPropertyAsString(&quot;LastMailServer&quot;) == null) {
					object.setLastMailServer(null);
				} else {
					object.setLastMailServer(response.getPropertyAsString(&quot;LastMailServer&quot;));
				}
			}

			if (response.hasProperty(&quot;GoodEmail&quot;)) {
				if (response.getPropertyAsString(&quot;GoodEmail&quot;) == null) {
					object.setGoodEmail(false);
				} else {
					object.setGoodEmail(Boolean.parseBoolean(response.getPropertyAsString(&quot;GoodEmail&quot;)));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return object;
	}
}
</pre>
<p>
Bu classı yazdığımızda IDE <i>org.ksoap2.*</i> importlarını yapamadığı için uyarı verecektir çünkü standart Java ve Android SDK içinde o classlar bulunmamaktadır. Peki şimdi ne yapmak gerekir? Yazının konusu olan ksoap2 kütüphanesini indirip [4] projemize eklemeliyiz. Benim indirip kullandığım dosyanın ismi: <i>ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar</i>. JAR dosyasını projeme eklemek için de kullandığım yöntem: Proje klasörü içinde libs isminde bir klasör oluşturup projeye eklemek istediğim jar dosyalarını oraya attıktan sonra Eclipse Package Explorer&#8217;da proje üzerinde sağ click -> Properties -> Java Build Path -> Libraries -> Add JARs -> sonrasında da klasörün içindeki istenilen JAR dosyalarını eklenmesi..<br />
<br />
Bu işlemler sıkıntısız şekilde tamamlandıktan sonra projede herhangi bir hata kalmaması gerekiyor.<br />
<br />
Şimdi yukardaki kodda ne yaptığımıza gelelim.</p>
<pre class="brush: java; title: ; notranslate">
	private static final String METHOD_NAME = &quot;VerifyEmail&quot;;
	private static final String NAMESPACE = &quot;http://ws.cdyne.com/&quot;;
	private static final String SOAP_ACTION = &quot;http://ws.cdyne.com/VerifyEmail&quot;;
	private static final String URL = &quot;http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx&quot;;
</pre>
<p>
Burda metod ismi, namespace, soap action ve servisin bulunduğu adresi belirttik.<br />
</p>
<pre class="brush: java; title: ; notranslate">
VerifyEmailResult object = new VerifyEmailResult();
</pre>
<p>
Parse edilen verileri tutacağımız geçici nesnemizi yarattık.<br />
</p>
<pre class="brush: java; title: ; notranslate">
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		request.addProperty(&quot;email&quot;, eMail);
		request.addProperty(&quot;LicenseKey&quot;, licenseKey);

		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		envelope.dotNet = true;
		envelope.setOutputSoapObject(request);

		HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
		androidHttpTransport.debug = true;
</pre>
<p>
Burda da servise yapacağımız isteği oluşturup parametreleri ekliyoruz. Sonrasında SOAP envelope nesnesini oluşturup, bir .net servisini çağıracağımızı belirtiyoruz.<br />
</p>
<pre class="brush: java; title: ; notranslate">
			androidHttpTransport.call(SOAP_ACTION, envelope);
			SoapObject response = (SoapObject) envelope.getResponse();
</pre>
<p>
Burda servisi çağırıp gelen yanıtı <i>SoapObject</i> türünden bir nesneye atıyoruz.<br />
<br />
XML&#8217;den farklı olarak ksoap2 nesneleri kendine özel bir formatta tutulur ve bunlar üzerinde işlem yapılır. Örneğin yukarıda XML halini yazmış olduğum isteğe karşılık gelen bizim request nesnemizin içeriği aşağıdaki gibi olacaktır:</p>
<pre class="brush: plain; title: ; notranslate">
VerifyEmail{
    email=oguzozkeroglu@hotmail.com;
    LicenseKey=test;
}
</pre>
<p>
Gelen yanıta karşılık gelen response nesnemizin içeriği  de aşağıdaki gibi olacaktır:</p>
<pre class="brush: plain; title: ; notranslate">
anyType{
    ResponseText=Verified Email Address;
    ResponseCode=2;
    LastMailServer=mx4.hotmail.com;
    GoodEmail=true;
}
</pre>
<p>
Bu format parse işlemlerinde kolaylık sağlıyor. <i>anyType</i> XML&#8217;deki root&#8217;a yani <i>VerifyEmailResult</i>&#8216;a karşılık geliyor gibi düşünebiliriz. Diğerleri zaten isminden anlaşılıyor. Herhangi bir özelliğe erişmek için<br />
</p>
<pre class="brush: java; title: ; notranslate">
response.getPropertyAsString(&quot;OzellikIsmi&quot;);
</pre>
<p>
kullanılabilir. <i>(response.getProperty()</i> ise geri bir <i>String</i> değil <i>SoapObject</i> döndüreceği için ekranda görüntülemede ya da nesnenin özelliklerini atamada sıkıntı çıkarabilir. Özelliğe o nesneden ulaşmak istediğimizde ise aşağıdaki gibi bir yapı kullanabiliriz.<br />
</p>
<pre class="brush: java; title: ; notranslate">
String.valueOf(response.getProperty(&quot;OzellikIsmi&quot;));
</pre>
<p>
ksoap2&#8242;nin 2.5.8 sürümüne kadar böyle erişiliyordu. Parse işlemi için response nesnemizin öyle bir özelliği varsa ve <i>null</i> değilse kontrollerinden sonra atama yapıp en son nesneyi geri döndürüyoruz.</p>
<pre class="brush: java; title: ; notranslate">
			if (response.hasProperty(&quot;ResponseText&quot;)) {
				if (response.getPropertyAsString(&quot;ResponseText&quot;) == null) {
					object.setResponseText(null);
				} else {
					object.setResponseText(response.getPropertyAsString(&quot;ResponseText&quot;));
				}
			}
            /** ... */
</pre>
<p>
Bu iki classı yazdıktan sonra ana sayfaya ait olan layout sayfasına (XML), bir adet <i>Button</i> ve 4 adet <i>TextView</i> ekledim. İşimiz tasarımla değil arka plandaki işlerle olduğu için tasarıma pek takılmayalım, dandik durduğunun farkındayım :)<br />
<br />
<img src="http://www.oguzozkeroglu.com/images/android/ksoap2-android-01.png" /><br />
<br />
Artık elimizdeki malzemeleri kullanmanın zamanı geldi. Ana sayfada aşağıdaki global tanımlamaları ekledim<br />
</p>
<pre class="brush: java; title: ; notranslate">
	VerifyEmailResult object = null;
	final String eMail = &quot;oguzozkeroglu@hotmail.com&quot;;
	final String licenseKey = &quot;test&quot;;
    mThread thread = null;
</pre>
<p>
Butonu tanımlayıp işlevsellik kazandıralım<br />
</p>
<pre class="brush: java; title: ; notranslate">
		Button btnInvokeService = (Button) findViewById(R.id.btnInvoke);
		btnInvokeService.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				thread = new mThread();
				thread.start();
			}
		});
</pre>
<p>
Butona basındığında tanımladığımız thread çalışacak. Peki thread ne yapacak?<br />
</p>
<pre class="brush: java; title: ; notranslate">
		private class mThread extends Thread {
		@Override
		public void run() {
			object = EmailValidator.verifyEmail(eMail, licenseKey);
			handler.sendEmptyMessage(0);
		}

		private Handler handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				thread.interrupt();
				setTexts();
			}
		};
	}
</pre>
<p>
Çağırdığımızda <i>EmailValidator</i> classımızın <i>verifyEmail</i> metodunu çağıracak ve işlem bittikten sonra <i>setTexts</i> metodu çağrılacak. O metod ne yapacak?<br />
</p>
<pre class="brush: java; title: ; notranslate">
	private void setTexts() {
		TextView tv1 = (TextView) findViewById(R.id.tv1);
		TextView tv2 = (TextView) findViewById(R.id.tv2);
		TextView tv3 = (TextView) findViewById(R.id.tv3);
		TextView tv4 = (TextView) findViewById(R.id.tv4);

		tv1.setText(&quot;ResponseText   -&gt;&quot; + object.getResponseText());
		tv2.setText(&quot;ResponseCode   -&gt;&quot; + object.getResponseCode());
		tv3.setText(&quot;LastMailServer -&gt;&quot; + object.getLastMailServer());
		tv4.setText(&quot;GoodEmail      -&gt;&quot; + object.isGoodEmail());
	}
</pre>
<p>
Basit bir şekilde servisten dönen bilgileri oluşturduğumuz <i>TextView</i>&#8216;lara atayacak ve ekranda görünmesini sağlayacak. Butona basıldıktan kısa bir süre sonra aşağıdakine benzer bir şeyler ortaya çıkmalı:<br />
<br />
<img src="http://www.oguzozkeroglu.com/images/android/ksoap2-android-02.png" /><br />
<br />
Orada görünen ResponseText ve ResponseCode listesinin tamamını metodlardan biri veriyor. Ben çıktıyı buraya da yazayım.<br />
</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;
			   xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
			   xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
  &lt;soap:Body&gt;
    &lt;ReturnCodesResponse xmlns=&quot;http://ws.cdyne.com/&quot;&gt;
      &lt;ReturnCodesResult&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;0-Invalid Email Address&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;1-Not Used&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;2-Verified Email Address (Treat as a good email)&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;3-Mail Server will accept email (Treat as a good email)&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;4-User not found&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;5-Email Domain not found&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;6-Not Used&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;7-SMTP/Timeout Error (Treat as a good email)&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;8-Domain valid. Email server(s) down&lt;/anyType&gt;
        &lt;anyType xsi:type=&quot;xsd:string&quot;&gt;9-License Key allowance exceeded&lt;/anyType&gt;
      &lt;/ReturnCodesResult&gt;
    &lt;/ReturnCodesResponse&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;
</pre>
<p>
Umarım yararlı bir yazı olmuştur. Kullandığım yöntemler bu işi yapmanın en iyi yöntemleri olmayabilir, araçlar ve kullandığım terimler doğru olmayabilir ama bu haliyle benim işimi gördüler bugüne kadar. Herhangi bir eleştiri / düzeltme / ekleme yapmak isteyen olursa konuya yorum bırakabilir ya da mail atabilir.</p>
<hr />
*0 -> http://en.wikipedia.org/wiki/SOAP<br />
*1 -> http://code.google.com/p/ksoap2-android/<br />
*2 -> http://www.soapui.org/<br />
*3 -> http://www.crosschecknet.com/products/soapsonar.php<br />
*4 -> http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-ksoap2-kullanarak-webservislere-erisme/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Look Out!</title>
		<link>http://www.oguzozkeroglu.com/look-out/</link>
		<comments>http://www.oguzozkeroglu.com/look-out/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 06:04:48 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[müzik]]></category>
		<category><![CDATA[black sabbath]]></category>
		<category><![CDATA[children of the sea]]></category>
		<category><![CDATA[dio]]></category>
		<category><![CDATA[Ronnie James Dio]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=445</guid>
		<description><![CDATA[LOOK OUT! the sky is falling down! LOOK OUT! The world is spinning round and round and round! LOOK OUT! The sun is going black, black LOOK OUT! It&#8217;s never never never coming back, LOOK OUT!]]></description>
			<content:encoded><![CDATA[<p>LOOK OUT! the sky is falling down!<br />
LOOK OUT! The world is spinning round and round and round!<br />
LOOK OUT! The sun is going black, black<br />
LOOK OUT! It&#8217;s never never never coming back, LOOK OUT!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/look-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android :: Enable / Disable Wifi</title>
		<link>http://www.oguzozkeroglu.com/android-enable-disable-wifi/</link>
		<comments>http://www.oguzozkeroglu.com/android-enable-disable-wifi/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 11:27:12 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[access wifi state]]></category>
		<category><![CDATA[android sdk]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[disable wifi]]></category>
		<category><![CDATA[enable wifi]]></category>
		<category><![CDATA[wifimanager]]></category>
		<category><![CDATA[wifi_service]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=442</guid>
		<description><![CDATA[Android cihazın wifi durumuna erişip, ağa bağlı mı değil mi kontrolü yapan ve wifi durumunu etkinliştirip / devre dışı bırakan basit bir sayfa için aşağıdaki metodlar kullanılabilir. Metodların çalışabilmesi için wifi durumuna erişim ve wifi durumunu değiştirebilme izinlerini manifest dosyasına eklemek gerekir. WifiManager&#8217;dan bir nesne oluşturup, bu nesnenin özelliklerini ve metodlarını kullanacağız. Nesneyi global tanımlamakta [...]]]></description>
			<content:encoded><![CDATA[<p>Android cihazın wifi durumuna erişip, ağa bağlı mı değil mi kontrolü yapan ve wifi durumunu etkinliştirip / devre dışı bırakan basit bir sayfa için aşağıdaki metodlar kullanılabilir. Metodların çalışabilmesi için wifi durumuna erişim ve wifi durumunu değiştirebilme izinlerini manifest dosyasına eklemek gerekir.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;uses-permission android:name=&quot;android.permission.ACCESS_WIFI_STATE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.CHANGE_WIFI_STATE&quot; /&gt;
</pre>
<p>WifiManager&#8217;dan bir nesne oluşturup, bu nesnenin özelliklerini ve metodlarını kullanacağız.</p>
<pre class="brush: java; title: ; notranslate">
WifiManager wifi = null;
</pre>
<p>Nesneyi global tanımlamakta fayda var. İki metod içerisinde de bu nesne kullanılacak.<br />
Aşağıdaki metod çağrıldığında önce wifi durumu kontrol ediliyor. Eğer aktif ise önce devre dışı bırakılıyor, sonrasında kullanıcıya wifi&#8217;ın devre dışı bırakıldığına dair bir uyarı mesajı gösteriliyor. Eğer devre dışı bırakılıyorsa sadece kullanıcıya wifi&#8217;ın devre dışı bırakılıyor olduğuna dair bir mesaj gösteriliyor. Diğer durumlarda ise -örneğin wifi zaten devre dışı ise- hiçbir iş yapılmıyor.</p>
<pre class="brush: java; title: ; notranslate">
private void disableWifi() {
		try {
			wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
			if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
				wifi.setWifiEnabled(false);
				showNotification(&quot;Wifi is disabled!&quot;);
			} else if (wifi.getWifiState() == WifiManager.WIFI_STATE_DISABLING){
				showNotification(&quot;Wifi is disabling!&quot;);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
</pre>
<p>Aşağıdaki metod da yukarıdakinin tam tersi işleri yapıyor.</p>
<pre class="brush: java; title: ; notranslate">
private void enableWifi() {
		try {
			wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
			if (wifi.getWifiState() == WifiManager.WIFI_STATE_DISABLED) {
				wifi.setWifiEnabled(true);
				showNotification(&quot;Wifi is enabled!&quot;);
			} else if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLING){
				showNotification(&quot;Wifi is enabling!&quot;);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
</pre>
<p>Metodlarda kullanılan showNotification() metodu ise sadece parametre olarak aldığı stringi Toast mesajı olarak ekranda gösteriyor. İçeriği de aşağıdaki gibi:</p>
<pre class="brush: java; title: ; notranslate">
private void showNotification(String message) {
		Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
	}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-enable-disable-wifi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress :: Tema&#8217;da &#8220;Anasayfa&#8221; Bağlantısının Olup/Olmaması</title>
		<link>http://www.oguzozkeroglu.com/wordpress-temada-anasayfa-baglantisinin-olupolmamasi/</link>
		<comments>http://www.oguzozkeroglu.com/wordpress-temada-anasayfa-baglantisinin-olupolmamasi/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 13:44:02 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[show_home]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=430</guid>
		<description><![CDATA[Benim kullandığım temada var ama bazı WordPress temalarında, genellikle header bölümünde yer alan sayfa bağlantıları arasında &#8220;Anasayfa&#8221; (&#8220;Home&#8221;) seçeneği olmayabiliyor. Çözümü için de aşağıdaki satırları tema klasörü içindeki functions.php içine eklemek yeterli. Belki tema klasörü içindeki tüm dosyalarda &#8220;home&#8221; stringini arayıp da çıldırmak üzere olan başkaları da olur, sonrasında burayı bulur&#8230;]]></description>
			<content:encoded><![CDATA[<p><img title="wordpress-logo" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/12/wordpress-logo.jpg" alt="wordpress-logo" width="392" height="237" /><br />
Benim kullandığım temada var ama bazı WordPress temalarında, genellikle header bölümünde yer alan sayfa bağlantıları arasında &#8220;Anasayfa&#8221; (&#8220;Home&#8221;) seçeneği olmayabiliyor.</p>
<p><img title="wp-theme-001" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/12/wp-theme-001.png" width="408" height="48" /></p>
<p><img title="wp-theme-002" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/12/wp-theme-002.png" width="250" height="55" /></p>
<p><img title="wp-theme-003" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/12/wp-theme-003.png" width="216" height="51" /></p>
<p>Çözümü için de aşağıdaki satırları tema klasörü içindeki functions.php içine eklemek yeterli.</p>
<pre class="brush: php; title: ; notranslate">
function my_page_menu_args($args) {
	$args['show_home'] = true;
	return $args;
}
add_filter('wp_page_menu_args', 'my_page_menu_args');
</pre>
<p>Belki tema klasörü içindeki tüm dosyalarda &#8220;home&#8221; stringini arayıp da çıldırmak üzere olan başkaları da olur, sonrasında burayı bulur&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/wordpress-temada-anasayfa-baglantisinin-olupolmamasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java :: XML Dosyası Oluşturma</title>
		<link>http://www.oguzozkeroglu.com/java-xml-dosyasi-olusturma/</link>
		<comments>http://www.oguzozkeroglu.com/java-xml-dosyasi-olusturma/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 11:13:15 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[create xml]]></category>
		<category><![CDATA[java tutorial]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=426</guid>
		<description><![CDATA[Java&#8217;da XML dosyası oluşturmam gerektiğinde bulduğum kodu, başkalarının da işine yarar umuduyla buraya da yazayım. Amaç şu aşağıdaki formatta bir XML dosyası oluşturmak: Kodun orijinali üzerinde fazla değişiklik yapmadan aşağıdaki haliyle inceleyelim: Eğer hatasız çalışırsa proje klasörü içinde &#8220;file.xml&#8221; adında bir dosya oluşacaktır. İçeriği de aşağıdaki gibi: Fazla açıklama da yazmadık ama adamlar zaten güzel [...]]]></description>
			<content:encoded><![CDATA[<p>Java&#8217;da XML dosyası oluşturmam gerektiğinde bulduğum kodu, başkalarının da işine yarar umuduyla buraya da yazayım.<br />
Amaç şu aşağıdaki formatta bir XML dosyası oluşturmak:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;sirket&gt;
	&lt;calisan id=&quot;1&quot;&gt;
		&lt;ad&gt;İsim&lt;/ad&gt;
		&lt;soyAd&gt;SOYİSİM&lt;/soyAd&gt;
		&lt;maas&gt;1000&lt;/maas&gt;
	&lt;/calisan&gt;
	&lt;calisan id=&quot;2&quot;&gt;
		&lt;ad&gt;İsim2&lt;/ad&gt;
		&lt;soyAd&gt;SOYİSİM2&lt;/soyAd&gt;
		&lt;maas&gt;1000&lt;/maas&gt;
	&lt;/calisan&gt;
&lt;/sirket&gt;
</pre>
<p>Kodun orijinali üzerinde fazla değişiklik yapmadan aşağıdaki haliyle inceleyelim:</p>
<pre class="brush: java; title: ; notranslate">
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class CreateXML {
	public static void main(String[] args) {
		try {
			/**
			 * Kodun kaynağı:
			 * http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/
			 */
			DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

			/** Şirket */
			Document doc = docBuilder.newDocument();
			Element rootElement = doc.createElement(&quot;sirket&quot;);
			doc.appendChild(rootElement);

			/** Çalışan */
			Element staff = doc.createElement(&quot;calisan&quot;);
			rootElement.appendChild(staff);

			/** Çalışana id özelliği atama */
			Attr attr = doc.createAttribute(&quot;id&quot;);
			attr.setValue(&quot;1&quot;);
			staff.setAttributeNode(attr);

			/** Şöyle bir de kısayolu var */
			// staff.setAttribute(&quot;id&quot;, &quot;1&quot;);

			/** Ad */
			Element firstname = doc.createElement(&quot;ad&quot;);
			firstname.appendChild(doc.createTextNode(&quot;İsim&quot;));
			staff.appendChild(firstname);

			/** Soyad */
			Element lastname = doc.createElement(&quot;soyAd&quot;);
			lastname.appendChild(doc.createTextNode(&quot;SOYİSİM&quot;));
			staff.appendChild(lastname);

			/** Maaş */
			Element salary = doc.createElement(&quot;maas&quot;);
			salary.appendChild(doc.createTextNode(&quot;1000&quot;));
			staff.appendChild(salary);

			/** İçeriğin bir XML dosyasına yazılması */
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			DOMSource source = new DOMSource(doc);
			StreamResult result = new StreamResult(new File(&quot;file.xml&quot;));

			transformer.transform(source, result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
</pre>
<p>Eğer hatasız çalışırsa proje klasörü içinde &#8220;file.xml&#8221; adında bir dosya oluşacaktır. İçeriği de aşağıdaki gibi:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;sirket&gt;
	&lt;calisan id=&quot;1&quot;&gt;
		&lt;ad&gt;İsim&lt;/ad&gt;
		&lt;soyAd&gt;SOYİSİM&lt;/soyAd&gt;
		&lt;maas&gt;1000&lt;/maas&gt;
	&lt;/calisan&gt;
&lt;/sirket&gt;
</pre>
<p>Fazla açıklama da yazmadık ama adamlar zaten güzel yazmışlar, açıklama yazmaya pek gerek kalmamış.<br />
Kaynak: mkyong.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/java-xml-dosyasi-olusturma/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java :: Email Regex</title>
		<link>http://www.oguzozkeroglu.com/java-email-regex/</link>
		<comments>http://www.oguzozkeroglu.com/java-email-regex/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 13:15:50 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[email validation]]></category>
		<category><![CDATA[java tutorial]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[regular expression]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=422</guid>
		<description><![CDATA[Üzerinde çalıştığım bir Android projesinde EditText alanına girilen e-mail değerinin gerçekten de bir e-mail adresi mi olduğunun kontrol edilmesi gerekiyordu. Bunun için aşağıdaki kodu bulup kullandım. Girilen tüm değerleri doğru test ediyor mu bilemem ama benim işimi görecek kadar iyi çalışıyor. Aşağıdaki kod bloğu ile test ettiğimde; şu aşağıdaki çıktıyı verdi: :: false test :: [...]]]></description>
			<content:encoded><![CDATA[<p>Üzerinde çalıştığım bir Android projesinde EditText alanına girilen e-mail değerinin gerçekten de bir e-mail adresi mi olduğunun kontrol edilmesi gerekiyordu. Bunun için aşağıdaki kodu bulup kullandım.</p>
<pre class="brush: java; title: ; notranslate">
boolean isEmailValid(String email) {
		String expression = &quot;^[\\w\\-]([\\.\\w])+[\\w]+@([\\w\\-]+\\.)+[A-Z]{2,4}$&quot;;
		CharSequence inputStr = email;

		Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(inputStr);
		return matcher.matches();
	}
</pre>
<p>Girilen tüm değerleri doğru test ediyor mu bilemem ama benim işimi görecek kadar iyi çalışıyor. Aşağıdaki kod bloğu ile test ettiğimde;</p>
<pre class="brush: java; title: ; notranslate">
		ArrayList&lt;String&gt; addresses = new ArrayList&lt;String&gt;();
		addresses.add(&quot; &quot;);
		addresses.add(&quot;test&quot;);
		addresses.add(&quot;test.com&quot;);
		addresses.add(&quot;test@com&quot;);
		addresses.add(&quot;test@test.com&quot;);
		addresses.add(&quot;test@test.com.&quot;);
		addresses.add(&quot;test@test.com.tr&quot;);
		addresses.add(&quot;test.test@test.com.tr&quot;);
		addresses.add(&quot;test@türkçe.karakter.tr&quot;);

		for (int i = 0; i &lt; addresses.size(); i++) {
			System.out.println(addresses.get(i) + &quot; :: &quot;
					+ isEmailValid(addresses.get(i)));
		}
</pre>
<p>şu aşağıdaki çıktıyı verdi:<code><br />
  :: false<br />
test :: false<br />
test.com :: false<br />
test@com :: false<br />
test@test.com :: true<br />
test@test.com. :: false<br />
test@test.com.tr :: true<br />
test.test@test.com.tr :: true<br />
test@türkçe.karakter.tr :: false<br />
</code><br />
Yeniden anlamış olduk ki regular expressions hayat kurtarır :)<br />
Kaynak: zparacha.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/java-email-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android :: ADB Connection Timeout Problemi</title>
		<link>http://www.oguzozkeroglu.com/android-adb-connection-timeout-problemi/</link>
		<comments>http://www.oguzozkeroglu.com/android-adb-connection-timeout-problemi/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 09:07:20 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[android sdk]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[ddms]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=418</guid>
		<description><![CDATA[İlki bir önceki yazım olan ve yalnızca 2 yazıdan oluşan muhteşem yazı dizime (Eclipse &#38; Android SDK kullanırken karşılaştığım hatalar) kaldığım yerden devam ediyorum. Bu sefer uygulamayı cihaz üzerinde çalıştırmak istediğimde aldığım hata ve google amcanın yardımıyla kavuştuğum çözümden bahsedeceğim. Hata aşağıdaki gibi: Android Launch! adb is running normally. Performing com.test.Splash activity launch Uploading Test.apk [...]]]></description>
			<content:encoded><![CDATA[<p>İlki bir önceki yazım olan ve yalnızca 2 yazıdan oluşan muhteşem yazı dizime (Eclipse &amp; Android SDK kullanırken karşılaştığım hatalar) kaldığım yerden devam ediyorum. Bu sefer uygulamayı cihaz üzerinde çalıştırmak istediğimde aldığım hata ve google amcanın yardımıyla kavuştuğum çözümden bahsedeceğim. Hata aşağıdaki gibi:<code><br />
Android Launch!<br />
adb is running normally.<br />
Performing com.test.Splash activity launch<br />
Uploading Test.apk onto device 'HT9A4LV01328'<br />
Failed to install Test.apk on device 'HT9A4LV01328': timeout<br />
Launch canceled!</code><br />
ADB çalışıyor, upload tamam ama uygulama yüklenemeden timeout&#8217;a düşüyor. Çözüm için de Eclipse -&gt; Preferences -&gt; Android -&gt; DDMS -&gt; ADB connection time out (ms) yolunu izliyoruz ve orda default 5.000 olarak gelen değeri biraz artırıyoruz. (misal 10.000, yetmezse 15.000 vs)<br />
<img class="aligncenter size-full wp-image-419" title="eclipse-adb-connection-timeout-error" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/09/eclipse-adb-connection-timeout-error.png" alt="Eclipse adb connection timeout error" width="635" height="416" /><br />
Yeniden denediğimizde Console çıktısını aşağıdaki gibi görüyorsak olay tamamdır.<code><br />
Android Launch!<br />
adb is running normally.<br />
Performing com.test.Splash activity launch<br />
Uploading Test.apk onto device 'HT9A4LV01328'<br />
Installing Test.apk...<br />
Success!<br />
Starting activity com.test.Splash on device HT9A4LV01328</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-adb-connection-timeout-problemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android :: AVD Başlatılamaması Problemi</title>
		<link>http://www.oguzozkeroglu.com/android-eclipse-avd-baslatilamamasi-problemi/</link>
		<comments>http://www.oguzozkeroglu.com/android-eclipse-avd-baslatilamamasi-problemi/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 09:27:29 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ADT plugin]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[avd]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=409</guid>
		<description><![CDATA[Android SDK ve Eclipse ADT Plugin&#8217;ini güncelledikten sonra daha önce yaratmış olduğum AVD&#8217;lerden bir tanesini çalıştırmak istediğimde aşağıdaki gibi bir hata aldım. invalid command-line parameter: Files. Hint: use '@foo' to launch a virtual device named 'foo'. please use -help for more information Google amcaya sordum &#8220;n&#8217;oluyoruz la?&#8221; diye, aynı problemle karşılaşmış insanlar gösterdi bana. Meğerse [...]]]></description>
			<content:encoded><![CDATA[<p>Android SDK ve Eclipse ADT Plugin&#8217;ini güncelledikten sonra daha önce yaratmış olduğum AVD&#8217;lerden bir tanesini çalıştırmak istediğimde aşağıdaki gibi bir hata aldım.<code><br />
invalid command-line parameter: Files.<br />
Hint: use '@foo' to launch a virtual device named 'foo'.<br />
please use -help for more information</code></p>
<p><img class="size-full wp-image-410 aligncenter" title="Eclipse avd error" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/09/avd-error.png" alt="Eclipse avd error" width="450" height="300" /></p>
<p>Google amcaya sordum &#8220;n&#8217;oluyoruz la?&#8221; diye, aynı problemle karşılaşmış insanlar gösterdi bana. Meğerse güncellemeden sonra Eclipse artizlik yapıp Windows&#8217;un boşluk, parantez vs karakterleri içeren dosya yollarını beğenmiyormuş. O güne kadar sorunsuz çalışan kısım, yani Eclipse -&gt; Window -&gt; Preferences -&gt; Android -&gt; SDK Location kısmında yazılı olan<code><br />
C:\Program Files (x86)\Android\android-sdk</code><br />
artık çalışmayacakmış.<br />
<img class="aligncenter size-full wp-image-411" title="Eclipse AVD error" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/09/avd-error2.png" alt="Eclipse AVD error" width="661" height="150" /><br />
&#8220;E çözüm neymiş peki?&#8221; diye baktığımda da o yolu şu aşağıdakilerden biri ile değiştirmek olduğunu öğrendim.<code><br />
C:\PROGRA~1\Android\android-sdk<br />
C:\PROGRA~2\Android\android-sdk</code><br />
İlki şuna;<code><br />
C:\Program Files\Android\android-sdk</code><br />
ikincisi de şuna;<code><br />
C:\Program Files (x86)\Android\android-sdk</code><br />
ilaçmış. İlgililere duyrulur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-eclipse-avd-baslatilamamasi-problemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>İşte Tam Da Bu Günlerde</title>
		<link>http://www.oguzozkeroglu.com/iste-tam-da-bu-gunlerde/</link>
		<comments>http://www.oguzozkeroglu.com/iste-tam-da-bu-gunlerde/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 09:48:01 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[genel]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=404</guid>
		<description><![CDATA[İçinde bulunduğum modu en iyi şu iki görsel anlatır;]]></description>
			<content:encoded><![CDATA[<p>İçinde bulunduğum modu en iyi şu iki görsel anlatır;</p>
<p><img class="aligncenter size-full wp-image-405" title="sleep01" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/09/sleep01.jpg" /></p>
<p><img class="aligncenter size-full wp-image-406" src="http://www.oguzozkeroglu.com/wp-content/uploads/2011/09/sleep02.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/iste-tam-da-bu-gunlerde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java :: Objelerin Sıralanması</title>
		<link>http://www.oguzozkeroglu.com/java-objelerin-siralanmasi/</link>
		<comments>http://www.oguzozkeroglu.com/java-objelerin-siralanmasi/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 12:03:31 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[arraylist]]></category>
		<category><![CDATA[java collections framework]]></category>
		<category><![CDATA[sort]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=376</guid>
		<description><![CDATA[Java&#8217;da List, ArrayList, Set vb Collections framework yapıları ve bunların metodları (add, remove, sort vb) sağladığı kolaylıklar sebebiyle bolca kullanır. Örneğin bir ArrayList içinde String ya da Integer tipinde nesneler varsa ve bunları sıralamamız gerekiyorsa Collections.sort(liste_ismi); şeklinde bir kullanımla listeyi sıralı hale getirebiliriz. Buna küçük bir örnek verelim. Aşağıdaki kod parçası bir ArrayList oluşturup içine [...]]]></description>
			<content:encoded><![CDATA[<p>Java&#8217;da List, ArrayList, Set vb Collections framework yapıları ve bunların metodları (add, remove, sort vb) sağladığı kolaylıklar sebebiyle bolca kullanır. Örneğin bir ArrayList içinde String ya da Integer tipinde nesneler varsa ve bunları sıralamamız gerekiyorsa  Collections.sort(liste_ismi); şeklinde bir kullanımla listeyi sıralı hale getirebiliriz. Buna küçük bir örnek verelim. Aşağıdaki kod parçası bir ArrayList oluşturup içine 5 tane String tipinde eleman ekliyor, elemanları sıra ile konsola yazdırıyor, sıralıyor ve son olarak sıralı listeyi konsola yazdırıyor.</p>
<pre class="brush: java; title: ; notranslate">
import java.util.ArrayList;
import java.util.Collections;

public class ObjectSort {
	/**
	 * @author Oguz
	 */
	public static void main(String[] args) {
		ArrayList mList = new ArrayList();

		mList.add(&quot;Black Sabbath&quot;);
		mList.add(&quot;Judas Priest&quot;);
		mList.add(&quot;Jimi Hendrix&quot;);
		mList.add(&quot;Dire Straits&quot;);
		mList.add(&quot;Pink Floyd&quot;);

		// Sıralanmamış listeyi yazdırıyoruz:
		System.out.println(&quot;Sıralanmamış dizi:&quot;);
		listeyiGoster(mList);

		// listeyi sıralıyoruz
		Collections.sort(mList);

		// Sıralanmış diziyi gösteriyoruz
		System.out.println(&quot;Sıralanmış dizi:&quot;);
		listeyiGoster(mList);
	}

	private static void listeyiGoster(ArrayList mList) {
		for (int i = 0; i &lt; mList.size(); i++) {
                      System.out.println(i + &quot; -&gt; &quot; + mList.get(i));
		}
	}
}
</pre>
<p>Kodun çıktısı aşağıdakine benzer olur:</p>
<blockquote><p>Sıralanmamış dizi:</p>
<p>0 -&gt; Black Sabbath</p>
<p>1 -&gt; Judas Priest</p>
<p>2 -&gt; Jimi Hendrix</p>
<p>3 -&gt; Dire Straits</p>
<p>4 -&gt; Pink Floyd</p>
<p>Sıralanmış dizi:</p>
<p>0 -&gt; Black Sabbath</p>
<p>1 -&gt; Dire Straits</p>
<p>2 -&gt; Jimi Hendrix</p>
<p>3 -&gt; Judas Priest</p>
<p>4 -&gt; Pink Floyd</p></blockquote>
<p>Elemanlarının tipi Integer, String, Double vs olan listeleri sıralamak basit, peki kendi nesnelerimizi nasıl sıralarız? Mesela String tipinde ad, soyad ve int tipinde doğum yılı alanları olan &#8216;Ogrenci&#8217; tipinde elemanları olan bir liste. Deneyelim..</p>
<p>Önce Ogrenci classımızı yazalım:</p>
<pre class="brush: java; title: ; notranslate">
public class Ogrenci {
	private String ad;
	private String soyAd;
	private int dogumYili;

	public Ogrenci(String ad, String soyAd, int dogumYili) {
		super();
		this.ad = ad;
		this.soyAd = soyAd;
		this.dogumYili = dogumYili;
	}

	public String getAd() {
		return ad;
	}

	public void setAd(String ad) {
		this.ad = ad;
	}

	public String getSoyAd() {
		return soyAd;
	}

	public void setSoyAd(String soyAd) {
		this.soyAd = soyAd;
	}

	public int getDogumYili() {
		return dogumYili;
	}

	public void setDogumYili(int dogumYili) {
		this.dogumYili = dogumYili;
	}

    @Override
	public String toString() {
		return this.getAd() + &quot; &quot; + this.getSoyAd() + &quot; :: &quot;
				+ this.getDogumYili();
	}
}
</pre>
<p>Şimdi main classın içinde elemanlarının tipi Ogrenci olan bir liste oluşturup elemanlar ekleyelim ve konsola yazdıralım.</p>
<pre class="brush: java; title: ; notranslate">
public static void main(String[] args) {
		ArrayList mList = new ArrayList();

		mList.add(new Ogrenci(&quot;F. Oğuz&quot;, &quot;ÖZKEROĞLU&quot;, 1988));
		mList.add(new Ogrenci(&quot;Ad&quot;, &quot;SOYAD&quot;, 1985));
		mList.add(new Ogrenci(&quot;İsim&quot;, &quot;SOYİSİM&quot;, 2000));
		mList.add(new Ogrenci(&quot;Deneme&quot;, &quot;YANILMA&quot;, 2011));

		// Sıralanmamış listeyi yazdırıyoruz:
		listeyiGoster(mList);
	}
	private static void listeyiGoster(ArrayList&lt;Ogrenci&gt; mList) {
            for (int i = 0; i &lt; mList.size(); i++) {
                System.out.println(i + &quot; -&gt; &quot; + mList.get(i));
           }
        }
</pre>
<p>Kodun çıktısı aşağıdakine benzer olur:</p>
<blockquote><p>
0 -&gt; F. Oğuz ÖZKEROĞLU :: 1988</p>
<p>1 -&gt; Ad SOYAD :: 1985</p>
<p>2 -&gt; İsim SOYİSİM :: 2000</p>
<p>3 -&gt; Deneme YANILMA :: 2011</p></blockquote>
<p>Şimdi listeyi sıralamaya çalışalım</p>
<pre class="brush: java; title: ; notranslate">
Collections.sort(mList);
</pre>
<p>Bu satırda IDE aşağıdaki uyarıyı veriyor:</p>
<blockquote><p>&#8216;Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments (ArrayList). The inferred type Ogrenci is not a valid substitute for the bounded parameter &lt;T extends Comparable&lt;? super T&gt;&gt;&#8217;</p></blockquote>
<p>Biz metoda listeyi sırala diye verdik ama neye göre sıralaması gerektiğini söylemedik. Ad, soyad ve doğum yılına göre sıralanabilir bir liste. Peki böyle durumlarda ne yapacağız? Sıralanacak türü diğer türdaşları ile karşılaştırılabilir bir forma sokacağız. Bunu yapabilmek için ben şöyle bir yöntem kullandım: Collections sınıfının sort metodunun liste ve Comparator türünden nesneleri parametre olarak alan versiyonunu kullandım. Metodu çağırırken Comparator classımı da oluşturdum. Sonunda aşağıdaki gibi bir kod parçası ortaya çıktı:</p>
<pre class="brush: java; title: ; notranslate">
public class ObjectSort {
	/**
	 * @author Oguz
	 */
	public static void main(String[] args) {
		ArrayList mList = new ArrayList();

		mList.add(new Ogrenci(&quot;F. Oğuz&quot;, &quot;ÖZKEROĞLU&quot;, 1988));
		mList.add(new Ogrenci(&quot;Ad&quot;, &quot;SOYAD&quot;, 1985));
		mList.add(new Ogrenci(&quot;İsim&quot;, &quot;SOYİSİM&quot;, 2000));
		mList.add(new Ogrenci(&quot;Deneme&quot;, &quot;YANILMA&quot;, 2011));

		// Sıralanmamış listeyi yazdırıyoruz:
		System.out.println(&quot;Sıralanmamış liste:&quot;);
		listeyiGoster(mList);

		// Listeyi sıralıyoruz
		Collections.sort(mList, new Comparator() {
			@Override
			public int compare(Ogrenci o1, Ogrenci o2) {
				String oName1 = o1.getAd();
				String oName2 = o2.getAd();
				return oName1.compareTo(oName2);
			}
		});

		// Sıralanmamış listeyi yazdırıyoruz:
		System.out.println(&quot;Sıralanmış liste:&quot;);
		listeyiGoster(mList);

	}

	private static void listeyiGoster(ArrayList&lt;Ogrenci&gt; mList) {
            for (int i = 0; i &lt; mList.size(); i++) {
                System.out.println(i + &quot; -&gt; &quot; + mList.get(i));
           }
        }
}
</pre>
<p>&#8216;compare&#8217; metoduna Ogrenci türünde aldığı iki nesnenin adlarını alıp birer String&#8217;e atmasını ve karşılaştırmayı bu Stringler arasında yapmasını söyledik. Sonuçta da aşağıdaki gibi bir konsol çıktısı oluştu:</p>
<blockquote><p>
Sıralanmamış liste:</p>
<p>0 -&gt; F. Oğuz ÖZKEROĞLU :: 1988</p>
<p>1 -&gt; Ad SOYAD :: 1985</p>
<p>2 -&gt; İsim SOYİSİM :: 2000</p>
<p>3 -&gt; Deneme YANILMA :: 2011</p>
<p>Sıralanmış liste:</p>
<p>0 -&gt; Ad SOYAD :: 1985</p>
<p>1 -&gt; Deneme YANILMA :: 2011</p>
<p>2 -&gt; F. Oğuz ÖZKEROĞLU :: 1988</p>
<p>3 -&gt; İsim SOYİSİM :: 2000</p></blockquote>
<p>Metoda aldığı öğrencileri adlarına göre sılaramasını söylediğimiz için konsol çıktısında sıralanmış liste ada göre sıralanmış bir liste oldu. Eğer listenin doğum yılına göre sıralanmasını istiyorsak metodumuzu aşağıdaki gibi değiştirmemiz gerekirdi.</p>
<pre class="brush: java; title: ; notranslate">
Collections.sort(mList, new Comparator() {
			@Override
			public int compare(Ogrenci o1, Ogrenci o2) {
				Integer oYear1 = o1.getDogumYili();
				Integer oYear2 = o2.getDogumYili();
				return oYear1.compareTo(oYear2);
			}
		});
</pre>
<p>Çıktı da aşağıdaki gibi olur:</p>
<blockquote><p>Sıralanmamış liste:</p>
<p>0 -&gt; F. Oğuz ÖZKEROĞLU :: 1988</p>
<p>1 -&gt; Ad SOYAD :: 1985</p>
<p>2 -&gt; İsim SOYİSİM :: 2000</p>
<p>3 -&gt; Deneme YANILMA :: 2011</p>
<p>Sıralanmış liste:</p>
<p>0 -&gt; Ad SOYAD :: 1985</p>
<p>1 -&gt; F. Oğuz ÖZKEROĞLU :: 1988</p>
<p>2 -&gt; İsim SOYİSİM :: 2000</p>
<p>3 -&gt; Deneme YANILMA :: 2011</p></blockquote>
<p>Liste artık dogumYili alanının değerlerine göre sıralı.</p>
<p>Yukarıda yalan &#8211; yanlış bilgiler yer alıyor olabilir, okuyanlar böyle bir şeyin farkına varırlarsa lütfen uyarmaktan çekinmesinler.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/java-objelerin-siralanmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

