<?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 &#187; java</title>
	<atom:link href="http://www.oguzozkeroglu.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oguzozkeroglu.com</link>
	<description>Web günlüğü</description>
	<lastBuildDate>Wed, 01 Feb 2012 06:06:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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>0</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>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>
		<item>
		<title>Android :: SdCard İçinde Alt Klasör Oluşturma</title>
		<link>http://www.oguzozkeroglu.com/android-sdcard-icinde-alt-klasor-olusturma/</link>
		<comments>http://www.oguzozkeroglu.com/android-sdcard-icinde-alt-klasor-olusturma/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 20:47:20 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[file]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=371</guid>
		<description><![CDATA[Android&#8217;in veri saklama yöntemleri ile alakalı daha önce Android :: Shared Preferences yazısını yazmıştım. O listedeki external storage cihazın harici hafızasına, yani şimdilik sd karta tekabül ediyor. Üzerinde çalıştığım projelerin birinde mp3 dosyalarını saklamam gerekiyordu. Sayısı birden fazla ve her birinin ortalama boyutu 10 mb civarında mp3 dosyalarını dahili hafızaya ya da uygulama paketi içinde [...]]]></description>
			<content:encoded><![CDATA[<p>Android&#8217;in veri saklama yöntemleri ile alakalı daha önce <a href="http://www.oguzozkeroglu.com/android-shared-preferences/">Android :: Shared Preferences</a> yazısını yazmıştım. O listedeki external storage cihazın harici hafızasına, yani şimdilik sd karta tekabül ediyor.</p>
<p>Üzerinde çalıştığım projelerin birinde mp3 dosyalarını saklamam gerekiyordu. Sayısı birden fazla ve her birinin ortalama boyutu 10 mb civarında mp3 dosyalarını dahili hafızaya ya da uygulama paketi içinde bir yerlere yazsam kısa süre sonra cihaz kullanılmaz hale gelebilir. Bu durumda çözüm olarak dosyaları sd kart üzerine yazmaya karar verdim (Umarım doğru bir karar vermişimdir :)</p>
<p>Başta direkt sd kart üzerine yazıp uygulamayı çalıştırdım ama kısa süre sonra kart çöplüğe döndü. Her şeyi ana dizin içine atıyordum. İşte tam burda kart üzerinde bir klasör oluşturma ve dosyaları oraya yazma / oradan okuma zorunda kaldım. Bu yazıda da bu olayı nasıl yaptığımı anlatmaya çalışacağım.</p>
<p>Bunun için Java&#8217;nın &#8220;File&#8221; class&#8217;ından bir obje yaratıp, parametre olarak yol + klasör ismi verdim ve sonrasında file.mkdir() metodu ile klasörü oluşturdum. Kod aşağıdaki gibi:</p>
<pre class="brush: java; title: ; notranslate">
	File mFile = new File(&quot;/sdcard/altKlasor&quot;);
	mFile.mkdir();
</pre>
<p>Tabi bu kodun çalışması için yine her zamanki gibi AndroidManifest.xml dosyasına harici hafızaya yazma iznini eklememiz gerekiyor.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
</pre>
<p>Bu sayede direkt sd kart altında klasörü oluşturduk. Aşağıda Eclipse&#8217;teki File Explorer&#8217;ın kod çalışmadan önceki ve sonraki hali var.</p>
<p>Önce:</p>
<p><img class="aligncenter" src="http://www.oguzozkeroglu.com/images/android/android-extarnal-storage-001.png" alt="" /></p>
<p>Sonra:</p>
<p><img class="aligncenter" src="http://www.oguzozkeroglu.com/images/android/android-extarnal-storage-002.png" alt="" /></p>
<p>Kodu çalıştırdık işimizi gördük ama burda ufak bir sıkıntı var. Sd kartın yolunu elle girdik. İlerde yolun değişebilmesi ya da sd kart yerine başka bir harici hafıza kullanılabilmesi durumlarına karşılık daha iyi bir yöntem kullanmak gerekti. Bunun için de harici hafızanın direkt yolunu alan aşağıdaki kodu buldum.</p>
<pre class="brush: java; title: ; notranslate">
	String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
</pre>
<p>Bu şekilde biraz daha bağımsızlık ve esneklik kazanmış olduk. Dosyayı oluşturan kodun tamamı aşağıdaki gibi şekillendi.</p>
<pre class="brush: java; title: ; notranslate">
	String strNewFolder = &quot;/altKlasor&quot;;
	String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
	File mFile = new File(extStorageDirectory + strNewFolder);
	mFile.mkdir();
</pre>
<p>Belki birinin daha işine yarar..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-sdcard-icinde-alt-klasor-olusturma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android :: Statik Html ve JavaScript</title>
		<link>http://www.oguzozkeroglu.com/android-statik-html-ve-javascript/</link>
		<comments>http://www.oguzozkeroglu.com/android-statik-html-ve-javascript/#comments</comments>
		<pubDate>Sun, 15 May 2011 19:50:26 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[webkit]]></category>
		<category><![CDATA[WebView]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=361</guid>
		<description><![CDATA[WebView içinde bir web sayfasını göstermek için aşağıdaki kod kullanılıyor. Tabi bunu kullanabilmek için uygulamamıza internete erişim iznini vermemiz gerekiyor. Bunun için de AndroidManifest.xml dosyası içinde uygun yere aşağıdaki satırı ekliyoruz. Çalıştırdığımızda aşağıdaki gibi bir görüntü elde ediyoruz. Buraya kadar bir sıkıntı yok zaten bilinen şeyler. Peki kendi hazırladığımız bir html sayfasını nasıl gösteririz? Bunun [...]]]></description>
			<content:encoded><![CDATA[<p>WebView içinde bir web sayfasını göstermek için aşağıdaki kod kullanılıyor.</p>
<pre class="brush: java; title: ; notranslate">
	WebView wv;
	wv = (WebView) findViewById(R.id.webview);
	wv.loadUrl(&quot;http://www.google.com&quot;);
</pre>
<p>Tabi bunu kullanabilmek için uygulamamıza internete erişim iznini vermemiz gerekiyor. Bunun için de AndroidManifest.xml dosyası içinde uygun yere aşağıdaki satırı ekliyoruz.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
</pre>
<p>Çalıştırdığımızda aşağıdaki gibi bir görüntü elde ediyoruz.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://oguzozkeroglu.com/images/android/html-in-android-000.png" alt="" /></p>
<p>Buraya kadar bir sıkıntı yok zaten bilinen şeyler. Peki kendi hazırladığımız bir html sayfasını nasıl gösteririz?</p>
<p>Bunun için html içeriğimizi oluşturup bir stringe atıyoruz ve WebView içinde o stringi gösteriyoruz.</p>
<pre class="brush: java; title: ; notranslate">
String strHtml = &quot;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&quot;
				+ &quot;&lt;body text=\&quot;#444444\&quot; bgcolor=\&quot;#CCCCCC\&quot;&gt;&quot;
				+ &quot;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;h2&gt;&quot; + &quot;Static html content in Android&quot;
				+ &quot;&lt;/h2&gt;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;&quot;;

		wv.loadData(strHtml, &quot;text/html&quot;, &quot;UTF-8&quot;);
</pre>
<p style="text-align: center;"><img class="aligncenter" src="http://oguzozkeroglu.com/images/android/html-in-android-001.png" alt="" /></p>
<p style="text-align: left;">Artık internet erişimine gerek kalmadığı için Manifest dosyamızdan o izni kaldırabiliriz. Bu string içinde CSS de kullanılabilir. Bunlar yeterli değil, JavaScript de olsun diyorsanız aşağıdaki satırı WebView tanımlamasında sonra eklemeniz gerekir.</p>
<pre class="brush: java; title: ; notranslate">
wv.getSettings().setJavaScriptEnabled(true);
</pre>
<p style="text-align: center;"><img class="aligncenter" src="http://oguzozkeroglu.com/images/android/html-in-android-002.png" alt="" /></p>
<p>Örnek uygulamada kullandığım java dosyası:</p>
<pre class="brush: java; title: ; notranslate">
package com.oguz.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebView;

public class WebViewTest extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(
				WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
		setContentView(R.layout.webwiew_test);

		WebView wv = (WebView) findViewById(R.id.webkitWebView1);

		String strHtml = &quot;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&quot;
				+ &quot;&lt;body text=\&quot;#444444\&quot; bgcolor=\&quot;#CCCCCC\&quot;&gt;&quot;
				+ &quot;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;h2&gt;&quot;
				+ &quot;Static html content in Android&lt;/h2&gt;&quot;
				+ &quot;&lt;script type=\&quot;text/javascript\&quot;&gt;&quot;
				+ &quot;document.write(Date());&lt;/script&gt;&quot;
				+ &quot;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;&quot;;

		wv.getSettings().setJavaScriptEnabled(true);
		wv.loadData(strHtml, &quot;text/html&quot;, &quot;UTF-8&quot;);
	}
}
</pre>
<p>XML dosyası ise:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout
	xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
	android:layout_width=&quot;fill_parent&quot;
	android:layout_height=&quot;fill_parent&quot;&gt;
	&lt;android.webkit.WebView android:id=&quot;@+id/webkitWebView1&quot;
		android:layout_width=&quot;fill_parent&quot;
		android:layout_height=&quot;fill_parent&quot;&gt;
	&lt;/android.webkit.WebView&gt;
&lt;/LinearLayout&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-statik-html-ve-javascript/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Android :: Options Menu ve Alt Menü</title>
		<link>http://www.oguzozkeroglu.com/android-options-menu-ve-alt-menu/</link>
		<comments>http://www.oguzozkeroglu.com/android-options-menu-ve-alt-menu/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 20:52:22 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[options menu]]></category>
		<category><![CDATA[submenu]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=358</guid>
		<description><![CDATA[Android&#8217;in iPhone&#8217;dan farklı olarak menü tuşuna sahip olması ve bu menü tuşunun işlevini uygulamamız için özelleştirebiliyor olmamız bayağı faydalı bir şey. Yine bir önceki yazımda olduğu gibi projem üzerinde çalışırken kullanmak zorunda kaldığım options menü ve alt menülerden bahsedeceğim. Peki nedir bu options menü? Şu yukardaki görselde de görüldüğü üzere cihazın &#8220;menu&#8221; tuşuna basıldığında aşağıdan [...]]]></description>
			<content:encoded><![CDATA[<p>Android&#8217;in iPhone&#8217;dan farklı olarak menü tuşuna sahip olması ve bu menü tuşunun işlevini uygulamamız için özelleştirebiliyor olmamız bayağı faydalı bir şey. Yine <a href="http://www.oguzozkeroglu.com/android-shared-preferences/">bir önceki yazım</a>da olduğu gibi projem üzerinde çalışırken kullanmak zorunda kaldığım options menü ve alt menülerden bahsedeceğim.</p>
<h2>Peki nedir bu options menü?</h2>
<p><img src="http://www.oguzozkeroglu.com/images/android/android-options-menu.jpg"><br />
Şu yukardaki görselde de görüldüğü üzere cihazın &#8220;menu&#8221; tuşuna basıldığında aşağıdan açılan menüdür. Seçenek sayısı 6 taneye kadarsa hepsi orda görünür, 6&#8242;dan fazla ise 6. seçenek &#8220;more&#8221; olur ve diğer seçenekleri onu kullanarak görebiliriz. Ayrıca burda görünen menülerin de altında menüler olabilir. Bunlar da submenülerdir. Xml dosyasında tanımlayarak yapmak daha yaygın olsa da ben daha az tercih edilen yöntemle yapacağım. Bunun için eleştiriye açığım tabi.<br />
Öncelikle menünün olmasını istediğimiz Activity&#8217;nin onCreateOptionsMenu() metodunu override etmemiz gerekiyor. İçerisine de menü elemanlarını eklememiz lazım. Bunların da alt menülerinin olabileceğini görelim.</p>
<pre class="brush: java; title: ; notranslate">
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		SubMenu mMenu = menu.addSubMenu(&quot;Seçenek 0&quot;);

		mMenu.add(1, 11, 0, &quot;Alt seçenek 1&quot;);
		mMenu.add(1, 12, 0, &quot;Alt seçenek 2&quot;);
		mMenu.add(1, 13, 0, &quot;Alt seçenek 3&quot;);
		mMenu.add(1, 14, 0, &quot;Alt seçenek 4&quot;);

		menu.add(0, 2, 0, &quot;Seçenek 1&quot;);
		menu.add(0, 3, 0, &quot;Seçenek 2&quot;);
		menu.add(0, 4, 0, &quot;Seçenek 3&quot;);
		menu.add(0, 5, 0, &quot;Seçenek 4&quot;);
		menu.add(0, 6, 0, &quot;Seçenek 5&quot;);

		return true;
	}
</pre>
<p>
Activity içine yukardaki kodu eklediğimizde onCreateOptionsMenu() metodunu override etmiş oluyoruz ve içine 1 container menü ile 5 tane de seçenek eklemiş oluyoruz. Container menü diye bir terim yok belki de onu ben uydurdum ama işlev olarak benziyorlar çünkü ilk seçenek (Seçenek 0) 4 ayrı alt seçenek içeriyor. Menüye eleman eklerken 4 parametre kullandım. Bunları da aşağıdaki görsel özetliyor.<br />
<img src="http://www.oguzozkeroglu.com/images/android/android-options-menu-2.jpg"><br />
Uygulamayı bu haliyle çalıştırıp cihazın/emülatörün &#8220;menü&#8221; tuşuna bastıktan sonra aşağıdakine benzer bir görüntü elde etmemiz gerekir.<br />
<img src="http://www.oguzozkeroglu.com/images/android/android-options-menu-3.jpg"><br />
Sıfırıncı seçeneği seçtikten sonra da aşağıdaki gibi.<br />
<img src="http://www.oguzozkeroglu.com/images/android/android-options-menu-4.jpg"></p>
<p>Menümüzü ve alt menüsünü görüntülemede sıkıntı yok. Şimdi bu seçeneklerden herhangi biri seçildiğinde Android&#8217;e ne yapması gerektiğini söyleyelim. Bunun için de onOptionsItemSelected() metodunu override etmemiz gerekecek. Aşağıdaki kod ile de bunu yapalım.</p>
<pre class="brush: java; title: ; notranslate">
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 11:
			secenek11Tiklandi();
			return true;
		case 12:
			secenek12Tiklandi();
			return true;
		case 13:
			secenek13Tiklandi();
			return true;
		case 14:
			secenek14Tiklandi();
			return true;
		case 2:
			secenek2Tiklandi();
			return true;
		case 3:
			secenek3Tiklandi();
			return true;
		case 4:
			secenek4Tiklandi();
			return true;
		case 5:
			secenek5Tiklandi();
			return true;
		case 6:
			secenek6Tiklandi();
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}
</pre>
<p>
Bundan sonra da artık gidip aşağıdaki metodları oluşturmalı ve içeriğini ne yapılmasını istediğimiz şekilde doldurmalıyız: </p>
<ul>
<li>secenek11Tiklandi()</li>
<li>secenek12Tiklandi()</li>
<li>secenek13Tiklandi()</li>
<li>secenek14Tiklandi()</li>
<li>secenek2Tiklandi()</li>
<li>secenek3Tiklandi()</li>
<li>secenek4Tiklandi()</li>
<li>secenek5Tiklandi()</li>
<li>secenek6Tiklandi()</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-options-menu-ve-alt-menu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android :: Shared Preferences</title>
		<link>http://www.oguzozkeroglu.com/android-shared-preferences/</link>
		<comments>http://www.oguzozkeroglu.com/android-shared-preferences/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 11:32:08 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[shared preferences]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=353</guid>
		<description><![CDATA[Android veri depolama için birkaç farkı yöntem sunuyor. Bunları kendi sitesinde şöyle sıralamış: Shared Preferences: Store private primitive data in key-value pairs. Internal Storage: Store private data on the device memory. External Storage: Store public data on the shared external storage. SQLite Databases: Store structured data in a private database. Network Connection: Store data on [...]]]></description>
			<content:encoded><![CDATA[<p>Android veri depolama için birkaç farkı yöntem sunuyor. Bunları kendi sitesinde şöyle sıralamış:</p>
<ul>
<li>Shared Preferences: Store private primitive data in key-value pairs.</li>
<li>Internal Storage: Store private data on the device memory.</li>
<li>External Storage: Store public data on the shared external storage.</li>
<li>SQLite Databases: Store structured data in a private database.</li>
<li>Network Connection: Store data on the web with your own network server.</li>
</ul>
<p>Database kadar olmasa da shared preferences ufak tefek veri depolayıp/erişmek için kullanılası bir şey. Öyle büyük verilerle uğraşmadıkça database yerine tercih edilebilir.</p>
<p>Hash table yapısındaki gibi key-value prensibi ile çalışıyor farklı olarak yalnızca primitive tipler için kullanılabiliyor. Saklayabildiği tipler şunlar:</p>
<ul>
<li>boolean</li>
<li>float</li>
<li>int</li>
<li>long</li>
<li>string</li>
</ul>
<p>Çalıştığım projede böyle bir şey kullanma ihtiyacı duymuştum. Biraz araştırdıktan sonra işimi gördüm ama buraya da yazayım ki belki başkalarının da işine yarar bir gün.</p>
<p>Örnek bir uygulama üzerinde nasıl olacağını görelim. Öncelikle uygulamanın paylaşılan tercihlerine (bu şekilde çevirsem problem olmaz umarım) erişmek ve eğer daha önceden yoksa bir xml dosyası oluşturmamız gerekir. Verilerin yazıldığı dosya bir xml dosyası. Bunun için aşağıdaki kodu kullanabiliriz:</p>
<pre class="brush: java; title: ; notranslate">
	SharedPreferences mSharedPrefs = getSharedPreferences(&quot;xmlFile&quot;,
				MODE_PRIVATE);
</pre>
<p>İlk parametre oluşacak dosyanın ismini, ikincisi de hangi modda olacağını belirtiyor. MODE_PRIVATE ile bu dosyanın sadece bizim uygulamamız tarafından erişilebileceğini belirttik. Bundan sonraki adım da dosyayı editlemek için erişmemiz gerekir. Aşağıdaki satır ile de bunu sağlıyoruz.</p>
<pre class="brush: java; title: ; notranslate">
	SharedPreferences.Editor mPrefsEditor = mSharedPrefs.edit();
</pre>
<p>Artık dosyaya ulaştık. Buraya yukarda da belirttiğim gibi boolean, float, int, long ve/veya string veriler yazıp/okuyabiliriz. Yazmak için put, almak için de  get metodları [putString(), getBoolean()...] zaten geliyor.</p>
<p>Örnek uygulamamızda, uygulamanın kaç defa çalıştığını ekranda göstermek istediğimizi düşünelim. Bunun için bir sayaç oluşturalım ve bu değeri paylaşılan tercihlerden okuyalım. Daha sonra da bir textView ile ekranda gösterelim.</p>
<pre class="brush: java; title: ; notranslate">
	int mCounter = mSharedPrefs.getInt(&quot;counter&quot;, 0);
</pre>
<p>mCounter değişkenimize xmlFile içindeki &#8220;counter&#8221; isimli anahtarın değerini atıyoruz. getInt()[ve diğer getXXX] metodlarının aldığı ikinci parametre de default değer. Yani xml dosyası ortada yoksa ya da herhangi bir şekilde ordaki değeri alamazsak, default değerimiz geri dönüyor. Ayrıca dosyadan değer okumak için bir önceki satırdaki gibi editör oluşturmaya gerek yoktu. Editörü dosyaya yazmak için kullanacağız. Satırlar yer değişse ya da ikinci satır aradan çıksa da uygulama şimdilik çalışır.</p>
<p>Uygulamanın daha önce kaç defa çalıştırıldığını görmek için de aşağıdaki kodu yazıyoruz. Daha önceden main.xml içinde tanımladığımız textView nesnesinin text özelliğini, sayacımızın değeri ile güncelliyoruz.</p>
<pre class="brush: java; title: ; notranslate">
	TextView tv = (TextView) findViewById(R.id.tvSampleTv);
	tv.setText(&quot;Uygulama daha önce &quot; +String.valueOf(mCounter) + &quot; defa çalıştırıldı.&quot;);
</pre>
<p>Uygulamamızı şimdi çalıştırırsak aşağıdakine benzer bir görüntü elde etmiş olmamız lazım.</p>
<p><img src="http://www.oguzozkeroglu.com/images/android/shared-preferences-001.png" /></p>
<p>Benim bu örnekte kullandığım main.xml de aşağıdaki gibi.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
	android:layout_width=&quot;fill_parent&quot;
	android:layout_height=&quot;fill_parent&quot;
	android:orientation=&quot;vertical&quot;&gt;
	&lt;TextView android:layout_width=&quot;wrap_content&quot;
		android:layout_height=&quot;wrap_content&quot;
		android:id=&quot;@+id/tvSampleTv&quot;
		android:textStyle=&quot;bold&quot;
		android:textColor=&quot;#FFFFFF&quot;
		android:layout_gravity=&quot;center&quot;&gt;&lt;/TextView&gt;
&lt;/LinearLayout&gt;
</pre>
<p>Sayfamız görüntülendiğine göre artık uygulamamız bir defa daha çalışmış oldu. Demek ki artık sayacı artırmamız gerekecek. Bunun için de aşağıdaki satırları yazalım.</p>
<pre class="brush: java; title: ; notranslate">
	mPrefsEditor.putInt(&quot;counter&quot;, ++mCounter);
	mPrefsEditor.commit();
</pre>
<p>Nasıl database bağlantısı yapıp işlerimizi hallettikten sonra bağlantıyı kapatıyorsak, dosya açıp yazdıktan sonra dosyayı kapatıyorsak bunda da benzer bir durum (ama aynı değil tabi ki, sadece unutulmaması gereken bir şey olduğu için bu benzetmeleri yaptım. İntegral sınavlarındaki +c kadar önemli vallahi :)) olaraktan yaptıklarızı işlememiz lazım. commit() bunun için kullanıldı.</p>
<p>Uygulamayı bu haliyle çalıştırdığımızda yine ilk ekran görüntüsü gelecek. Yeni halini ilk defa çalıştırmış oluyoruz çünkü. Tekrar çalıştırdığımızda aşağıdaki,</p>
<p><img src="http://www.oguzozkeroglu.com/images/android/shared-preferences-002.png" /></p>
<p>üç defa daha çalıştırdıktan sonra da aşağıdaki görüntüye benzer şeyler görünmesi lazım.</p>
<p><img src="http://www.oguzozkeroglu.com/images/android/shared-preferences-003.png" /></p>
<p>Uygulamanın class kodu da aşağıdaki gibi şekillendi.</p>
<pre class="brush: java; title: ; notranslate">
package com.oguz.example;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.TextView;

public class SharedPrefsExample extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		SharedPreferences mSharedPrefs = getSharedPreferences(&quot;xmlFile&quot;,
				MODE_PRIVATE);
		SharedPreferences.Editor mPrefsEditor = mSharedPrefs.edit();

		int mCounter = mSharedPrefs.getInt(&quot;counter&quot;, 0);

		TextView tv = (TextView) findViewById(R.id.tvSampleTv);
		tv.setText(&quot;Uygulama daha önce &quot; + String.valueOf(mCounter)
				+ &quot; defa çalıştırıldı.&quot;);

		mPrefsEditor.putInt(&quot;counter&quot;, ++mCounter);
		mPrefsEditor.commit();
	}
}
</pre>
<p>Şimdi bu uygulamayı yaptık da ne oldu? Evet pek bi ekşın yok ortada çünkü örnek seçimini pek sağlıklı yapmadım. Seçtiğim örnek anlatmak istediğim olaya pek uygun değil ama o kısmı da burda anlatsam herhalde eksiği tamamlarım. Uygulamada tek activity olduğu için pek bir yararını göremedik ama uygulamamızın içindeki tüm classlardan bu özelliklere erişip / değişiklik yapabileceğimizi bilmemiz belki getirdiği kolaylığı farketmemizi sağlayabilir. Üstelik ram gibi program boyunca kalıp tekrar başlatıldığında da kaybolmuyor. Uygulama cihazda bulunduğu sürece değerler korunuyor. Belki bu açıklama örnek seçimimdeki açığı biraz kapatmıştır :)</p>
<p>Oluşan xml dosyamızı da /data/data/paket.adi/shared_prefs altında bulabilir. En başta belittiğimiz moda göre erişim hakları düzenleniyor.</p>
<p><img src="http://www.oguzozkeroglu.com/images/android/shared-preferences-004.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/android-shared-preferences/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Servisleri: Netbeans Kullanarak Twitter İstemcisi Yapma</title>
		<link>http://www.oguzozkeroglu.com/web-servisleri-netbeans-kullanarak-twitter-istemcisi-yapma/</link>
		<comments>http://www.oguzozkeroglu.com/web-servisleri-netbeans-kullanarak-twitter-istemcisi-yapma/#comments</comments>
		<pubDate>Fri, 21 May 2010 12:53:04 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[çalışmalar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jFrame]]></category>
		<category><![CDATA[jLabel]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[Ronnie James Dio]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter client]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=292</guid>
		<description><![CDATA[Netbeans&#8217;in sitesindeki web service tutorials sayfasında [0], Software as a Service (SaaS) kategorisinde bulunan Creating a Graphical Client for Twitter [1] isimli dökümanda anlatılanları yapmaya çalıştım ve görüntüsü ile işlevi ordakine benzer bir şey ortaya çıktı. Bu yazımda, bu iş için uğraşırken neler yaptığımdan bahsedeceğim (anladığım kadarıyla). Olası yanlış eylem ve anlatımlar için baştan uyarımı [...]]]></description>
			<content:encoded><![CDATA[<p>
    Netbeans&#8217;in sitesindeki web service tutorials sayfasında [0], Software as a Service (SaaS) kategorisinde bulunan Creating a Graphical Client for Twitter [1] isimli dökümanda anlatılanları yapmaya çalıştım ve görüntüsü ile işlevi ordakine benzer bir şey ortaya çıktı.<br />
    Bu yazımda, bu iş için uğraşırken neler yaptığımdan bahsedeceğim (anladığım kadarıyla).<br />
    Olası yanlış eylem ve anlatımlar için baştan uyarımı yapayım.
</p>
<p>
    Başlamadan önce eğer bir twitter hesabınız yoksa twitter.com&#8217;a gidip bir hesap edinin.<br />
    Sayfada dediğine göre twitter hesabının yanında Netbeans 6.5, 6.7 ya da 6.8 sürümlerinden biri ile Java Development Kit (JDK) V6 ya da V5&#8242;e de ihtiyacımız olacak. Ayrıca &#8220;web servisi ne demek?&#8221; diyenler olursa bu yazıdan önce wiki&#8217;den [2] web servisine baksa hoş olur.
</p>
<h3>Arayüzün tasarlanması</h3>
<p>
    Tasarlanacak ekranda genel twitlerin akışının olacağı bir liste, kişinin kullanıcı resmi ve durumunu okuyup istediğinde güncellemesi için bir metin kutusuyla bir buton olacak. Şimdi projeyi oluşturalım.
</p>
<p>
    Bunun için; Netbeans&#8217;i açıp, File -> New Project -> Java -> Java Application yolunu izleyelim.
</p>
<p>
    Daha sonra projemize bir isim verelim ve Create Main Class seçeneğinin başındaki tick&#8217;i kaldıralım. Ben ismi TwitterClient olarak vermişim.<br />
    Buraya kadar herhangi bir problem olmadıysa şu aşağıdakine benzer bir görüntü ortaya çıkmış olmalı.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/001.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/001.jpeg" /><br />
    </a>
</div>
<p>
    IDE yeni bir proje oluşturacaktır. Şimdi projeye bir paket ekleyelim ve o pakete de bir JFrame Form ekleyelim.<br />
    Bunun için paket üzerine sağ tıkladıktan sonra New -> JFrame Form ya da New -> Other -> Swing GUI Forms -> JFrame Form yolu izlenir.<br />
    Bu da yapıldıysa karşımızda aşağıdakine benzer bir ekran olmalı.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/002.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/002.jpeg" /><br />
    </a>
</div>
<p>
    Finish butonundan sonra IDE yaratılan formu tasarım kipinde açacaktır. Sağ taraftaki palet kısmında da sürükle bırak ile kullanılabilecek tüm Swing bileşenleri bulunmaktadır. Şimdi o paletten bir buton (jButton1) süreükleyip formun üzerine bırakalım. Daha sonra botun özelliklerinden ismi ve iconu değiştirilebilir. Bu buton, metin kutusuna yazdıklarımızı kullanarak durumumuzu güncellemek için kullanacağımız buton.<br />
    Butondan sonra bir tane de metin kutusuna ihtiyacımız var. Bunun için de paletten bir tane Text Field (jTextField1) sürükleyip butonun yanına bırakalım.<br />
    Buton ve metin kutusundan sonra da kullanıcı resmi için bir tane Label (jLabel1) sürükleyip metin kutusunun yanına bırakıyoruz. Üzerinde sağ tıkladıktan sonra Maximum Size, Minimum Size ve Preferred Size özelliklerini [48, 48] olacak şekilde değiştiriyoruz. Çünkü görünen resim boyutları bu kadar olacak, daha büyük olması sadece gereksiz boşluklara yol açacaktır.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/003.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/003.jpeg" /><br />
    </a>
</div>
<p>
    Şimdi de twitlerin listesi için bir adet Scroll Pane ve içine de bir adet List sürükleyip bırakıyoruz. Daha sonra da formu kaydediyoruz.<br />
    Tasarımda kullanılacak elemanlar bu kadar. Eğer herhangi bir problem olmadıysa görüntü şuna benzer olacaktır:
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/004.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/004.jpeg" /><br />
    </a>
</div>
<h3>Kullanıcı Durumunu Gösterme</h3>
<p>
    Arayüz tasarımından sonra kod kısımlarına başlayabiliriz. Kullanıcı durumunun gösterilmesi için yapılması gerekenleri bu başlık altında yazalım.<br />
    TwitterJFrame.java dosyasını açıp, tasarım kısmından kod kısmına geçelim ve main () metodunun yerini bulup üzerinde birkaç satır boşluk bırakalım.<br />
    Burda da aşağıdaki gibi yeni bir metod tanımlayalım ;
</p>
<pre class="brush: java; title: ; notranslate">
        private void initUserInfo() {

        }
    </pre>
<p>
    Şimdi IDE&#8217;nin Services penceresini açalım. Web Services altında Twitter > What Are You Doing Service > [statuses] > [user_timeline.{format}] > getUserTimeline yolunu izleyelim. Orda bulunan getUserTimeline parçasını yukarda oluşturduğumuz initUserInfo() metodunun içine sürükleyip bırakalım. Karşımızda Customize GET SaaS Service penceresi açılacaktır. O pencerede bulunan count alanının default değerini 1 yapıp diğer default değerleri değiştirmeden devam edelim.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/005.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/005.jpeg" /><br />
    </a>
</div>
<p>
    IDE bizim için initUserInfo() metodunun içinde kod üretecektir. Ayrıca org.netbeans.saas ve org.netbeans.saas.twitter paketleri ile içlerinde bazı dosyalar oluşturacaktır. Eğer kod düzensiz görünüyorsa editör içinde sağ tık -> format ya da Alt + Shift + F ile otomatik düzenleme yapılabilir.<br />
    Durumdan rahatsız olmayanlar için buna da gerek yok tabi ki :) Oluşturulan bu koddaki if () bloğunun içine aşağıdaki kodu eklemeliyiz :
</p>
<pre class="brush: java; title: ; notranslate">
       StatusType st = resultObj.getStatus().get(0);
       jTextField1.setText(st.getText().trim());
       UserType user = st.getUser();
       String iconSrc = user.getProfileImageUrl();
       URL iconUrl = new URL(iconSrc);
       ImageIcon icon = new ImageIcon(iconUrl, user.getScreenName());
       jLabel1.setIcon(icon);
    </pre>
<p>
    Eklediğimiz bu kod kullanıcı resmimiz ile mevcut durumumuzu jLabel1 ve jTextField1 içinde görüntülememizi sağlamak içindi. Tabi çalışması için IDE&#8217;nin yönlendirdiği gerekli importlar yapılmalı. Bunun için Ctrl + Shift + i kısayolu da kullanılabilir. Gerekli importlar da yapıldıktan sonra constructor bulunup içine initUserInfo(); satırı da eklenmelidir.
</p>
<pre class="brush: java; title: ; notranslate">
        public class TwitterJFrame extends javax.swing.JFrame {

            /** Creates new form TwitterJFrame */
             public TwitterJFrame() {
                     initComponents();
                      initUserInfo();
             }
    </pre>
<p>
    Projeyi kaydedip çalıştırdığımızda aşağıdakine benzer bir şeyler ortaya çıkmalı. Bu arada 16 Mayıs 2010&#8242;da hayata gözlerini yuman müzisyen Ronnie James DIO&#8217;nun da ismi bu yazıda yer almış oldu..
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/007.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/007.jpeg" /><br />
    </a>
</div>
<p>
    Bu sıra ile gidilirse proje istediğimiz gibi çalışmayacaktır çünkü herhangi bir yere kullanıcı adı ve parola girmedik. Bu bilgileri yazacağımız yer ise org.netbeans.saas.twitter içindeki twitterwhatareyoudoingserviceauthenticator.properties dosyası.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/006.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/006.jpeg" /><br />
    </a>
</div>
<p>
    Netbeans sayfasına Windows XP ve Linux için login işlemlerinde problemler çıkacağı yazıyordu.<br />
    Ben Pardus 2009.1 kullanıyorum ve bende de bahsettiği problemler çıktı. Çözümü de aynı sayfada verilmiş. Çözümü için örnek projede [3] bulunan twitterclient.AuthDialog.java dosyasını kendi twitterclient paketimize kopyalamamızı ve org.netbeans.saas.twitter altındaki TwitterWhatAreYouDoingServiceAuthenticator.java dosyasını kendimizinkinin yerine koymamızı öneriyordu. Önerdikleri değişiklikleri yaptım ve proje sorunsuz çalıştı.
</p>
<h3>Durum Güncelleme Metodunun Eklenmesi</h3>
<p>
    Güncelleme butonumuzun metin kutusundan aldığı metni kullanarak durumumuzu güncellemesini sağlamak için butona çift tıklayalım. IDE bizim için jButton1ActionPerformed () metodunu oluşturacaktır. Şimdi yeniden Services penceresinden Web Services -> Twitter -> WhatAreYouDoingService -> Statuses -> [update.{format}] -> updateStatus yolunu izleyelim. Daha sonra da burada bulunan updateStatus metodunu sürükleyip jButton1ActionPerformed() metodunun gövdesine bırakalım. Çıkan penceredeki öntanımlı değerleri kabul edip devam edelim.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/009.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/009.jpeg" /><br />
    </a>
</div>
<p>
    Oluşturulan kod içindeki try bloğundaki
</p>
<pre class="brush: java; title: ; notranslate">
        String status = &quot;&quot;;
    </pre>
<p>
 satırını
</p>
<pre class="brush: java; title: ; notranslate">
        String status = jTextField1.getText().trim();
    </pre>
<p>
    satırı ile değiştirdikten sonra projeyi kaydedip çalıştıralım. Formumuz artık durum güncellemesi yapabilmektedir.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/010.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/010.jpeg" /><br />
    </a>
</div>
<h3>Kullanıcı İsimlerini ve Durumlarını Formda Gösterme</h3>
<p>
    Twitlerin otomatik görünmesi için bir Timer nesnesine ihtiyacımız olacak. Bunun için consructordaki initComponents(); satırının üzerine Timer nesnesi için bir satır daha eklenir.
</p>
<pre class="brush: java; title: ; notranslate">
    public class TwitterJFrame extends javax.swing.JFrame {

    /** Creates new form TwitterJFrame */
    public TwitterJFrame() {
    Timer t = new Timer(&quot;Twitter Updater`&quot;, false);
    initComponents();
    initUserInfo();
    }
    </pre>
<p>
    Gerekli importlar yapıldıktan sonra consructor şöyle olacaktır :
</p>
<pre class="brush: java; title: ; notranslate">
    public class TwitterJFrame extends javax.swing.JFrame {

    /** Creates new form TwitterJFrame */
    public TwitterJFrame() {
        Timer t = new Timer(&quot;Twitter Updater`&quot;, false);
        t.scheduleAtFixedRate(new TimerTask() {

        }, 1500, 75000);
        initComponents();
        initUserInfo();
                    }
     </pre>
<p>
    Sonra da consructordan önce
</p>
<pre class="brush: java; title: ; notranslate">
        private DefaultListModel statuses = new DefaultListModel();
    </pre>
<p>
    satırlarnı koda eklemeliyiz. Gerekli importlar ve eklenen otomatik kodlardan sonra elimizde şu kodlar yer almalı :
</p>
<pre class="brush: java; title: ; notranslate">
        public class TwitterJFrame extends javax.swing.JFrame {

    private DefaultListModel statuses = new DefaultListModel();

    /** Creates new form TwitterJFrame */
    public TwitterJFrame() {
        Timer t = new Timer(&quot;Twitter Updater`&quot;, false);
        t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run(){

            }
        }, 1500, 75000);
        initComponents();
        initUserInfo();
                    }
    </pre>
<p>
    Şimdi yeniden Services penceresine açalım ve Web Services -> Twitter -> What Are You Doing Service -> [statuses] -> [public_timeline.{format}] -> getPublicTimeline yolunu izleyelim. getPublicTimeline metodunu t.scheduleAtFixedRate içindeki run() metodunun gövdesine sürükleyip bırakalım. Açılan pencerede yine default değerleri kabul edip devam edelim. IDE&#8217;nin bizim için oluşturduğu kod içindeki if() bloğunun içine(en alta), şu aşağıdaki kodu ekleyelim:
</p>
<pre class="brush: java; title: ; notranslate">
        for (final StatusType st : result2Obj.getStatus()) {
          SwingUtilities.invokeLater(new Runnable() {

              public void run() {
                   statuses.addElement(st);
              }
          });
     }
    </pre>
<p>
    Gerekli kütüphaneler import edildikten sonra genel akıştaki twitlerin alınması işi tamamlanmış oluyor. Şimdi bu twitleri listeleyebilmek için bir<br />
    nesne oluşturalım.
</p>
<p>
    Bunun için en başta oluşturduğumuz twitterclient paketinde sağ tıkladıktan sonra New > JPanel Form yoluyla bir JPanel Form ekleyelim. Açılan sayfada JPanel&#8217;e Item ismini verelim ve kaydedelim.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/012.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/012.jpeg" /><br />
    </a>
</div>
<p>
    Açılan tasarım ekranında paletten bir Label ve Text Pane sürükleyip formun üzerine bırakalım. Label kullanıcı ismini, Text Pane de o kullanıcının twitini gösterecek. Daha sonra tasarım kısmından çıkıp kod kısmına geçildiğinde:
</p>
<pre class="brush: java; title: ; notranslate">
        public class Item extends javax.swing.JPanel {
    </pre>
<p>
    satırına implements ListCellRenderer ifadesi eklenir.
</p>
<pre class="brush: java; title: ; notranslate">
        public class Item extends javax.swing.JPanel implements ListCellRenderer {
    </pre>
<p>
    Bu işlemden sonra aşağıdaki bloğa da yeni satırlar ekleyerek o hale getirelim ve gerekli kütüphaneleri import edelim:
</p>
<pre class="brush: java; title: ; notranslate">
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean sel, boolean focus) {
        StatusType st = (StatusType) value;
        jTextPane1.setText(st.getText());
        jLabel1.setText(&quot;&lt;html&gt;&quot; + st.getUser().getScreenName() + &quot;&lt;/html&gt;&quot;);
        return this;
                    }
    </pre>
<p>
    Artık Item classımız da hazır. Şimdi jFrame&#8217;e geri dönelim ve tasarım kipinde açalım. JList üzerinde sağ tıklayıp Properties penceresini açalım.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/013.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/013.jpeg" /><br />
    </a>
</div>
<p>
    model özelliğini seçelim ve Ctrl + Space tuşlarına birlikte bastığımızda yeni bir pencere açılacak.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/014.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/014.jpeg" /><br />
    </a>
</div>
<p>
     &#8220;Set jLlist1&#8242;s model property using:&#8221; menüsünden Custom Code seçeneğini seçelim ve açılan metin kutusuna &#8220;statuses&#8221; yazalım ve devam edelim.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/015.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/015.jpeg" /><br />
    </a>
</div>
<p>
    Properties penceresindeki cellRenderer özelliğini seçelim ve yine Ctrl + Space tuşlarına birlikte basalım. Açılan pencerede karşımıza çıkan &#8220;Set jList1&#8242;s cellRenderer property using:&#8221; menüsünden Custom Code seçeneğini seçtikten sonra metin kutusune new Item() yazıp devam edelim.
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/016.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/016.jpeg" /><br />
    </a>
</div>
<p>
    İşte bu kadar!
</p>
<div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/017.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/017.jpeg" /><br />
    </a>
</div>
<p>
     Projeyi kaydedip çalıştırdığımızda Web Services -> Twitter -> What Are You Doing Service -> [statuses] -> [public_timeline.{format}] -> getPublicTimeline kullandığımız için takip etmediğimiz kişilerin de twitlerini görüntülüyor olacağız. Daha edepli şeyler görmeyi umardım :)
</p>
<p>
    Peki sadece takip ettiğimiz kişilerin twitlerini görüntülemek için ne yapmalıyız? Çok fazla bir değişiklik yok aslında. Yukarıda<br />
    Web Services -> Twitter -> What Are You Doing Service -> [statuses] -> [public_timeline.{format}] -> getPublicTimeline yolunu izlemiştik.<br />
    Şimdi sadece o yolu Web Services -> Twitter -> What Are You Doing Service -> [statuses] -> [friends_timeline.{format}] -> getFriendsTimeline yoluyla değiştireceğiz. O değişiklikten sonra da aşağıdaki gibi bir ekran elde ettim.
</p>
<p><div>
    <a href="http://www.oguzozkeroglu.com/images/twitter-client/018.jpeg" class="highslide" onclick="return hs.expand(this)"><br />
        <img src="http://www.oguzozkeroglu.com/images/twitter-client-thumbs/018.jpeg" /><br />
    </a>
</div>
</p>
<p>    Takip ettiklerim inşallah telif hakkı diye koşmazlar gelecekte arkamdan :)</p>
<p>
    Bir hazır çalışmanın daha sonuna geldik. İleride belki bir şeyler öğrenirim de kendi çalışmalarımı burda yazarım. Şimdilik umuduyla yaşayıp sıfır uğraşla devam edelim..
</p>
<hr />
<p>[0] -> http://netbeans.org/kb/trails/web.html<br />
[1] -> http://netbeans.org/kb/docs/websvc/twitter-swing.html<br />
[2] -> http://en.wikipedia.org/wiki/Web_service<br />
[3] -> http://www.oguzozkeroglu.com/download/TwitterSwingClient.zip<br />
&nbsp;&nbsp;&nbsp;&nbsp; -> http://netbeans.org/files/documents/4/2432/TwitterSwingClient.zip</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/web-servisleri-netbeans-kullanarak-twitter-istemcisi-yapma/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>C# Yapar Da Java Yapamaz Mı?</title>
		<link>http://www.oguzozkeroglu.com/c-yapar-da-java-yapamaz-mi/</link>
		<comments>http://www.oguzozkeroglu.com/c-yapar-da-java-yapamaz-mi/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 09:27:39 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[cSharp]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[Türkçe karakter]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=273</guid>
		<description><![CDATA[Daha önceki Değişken Adında Türkçe Karakter Kullanımı [C#] yazımda bahsettiğim C#&#8217;taki değişken, class, namespace isimlerinde Türkçe karakter kullanabiliyor olmak &#8220;C#&#8217;ta varsa Java&#8217;da neden olmasın?&#8221; sorusunu kendime sormama ve neticesinde bu yazının yazılmasına vesile oldu. Netbeans 6.8 ve Eclipse Galileo ile aynı şeyleri denedim ikisinde de sonuç aynı : C#&#8217;ın yaptığını Java da yapıyor; proje, package, [...]]]></description>
			<content:encoded><![CDATA[<p>Daha önceki <a href="http://www.oguzozkeroglu.com/degisken-adinda-turkce-karakter-kullanimi-c/" target="_blank" title="Değişken Adında Türkçe Karakter Kullanımı [C#]">Değişken Adında Türkçe Karakter Kullanımı [C#]</a> yazımda bahsettiğim C#&#8217;taki değişken, class, namespace isimlerinde Türkçe karakter kullanabiliyor olmak &#8220;C#&#8217;ta varsa Java&#8217;da neden olmasın?&#8221; sorusunu kendime sormama ve neticesinde bu yazının yazılmasına vesile oldu.</p>
<p>Netbeans 6.8 ve Eclipse Galileo ile aynı şeyleri denedim ikisinde de sonuç aynı : C#&#8217;ın yaptığını Java da yapıyor; proje, package, class ve değişken isimlerinde Türkçe karakter kullanmak istendiğinde &#8220;Abi sen burda Türkçe karakter kullanmaya çalışıyorsun ama bunu yapamazsın, mümkünse onları İngilizce karşılıkları ile değiştir&#8221; falan demiyor.</p>
<p>O yazıdaki kodun yaklaşık Java karşılığı aşağıda : </p>
<pre class="brush: java; title: ; notranslate">
package türkçekarakter;

public class TürkçeKarakterİçerenSınıf {
    public static void main(String[] args) {

        String strTürkçeKarakterİçerenDeğişken = &quot;Değişkenin değeri.&quot;;
        System.out.println(strTürkçeKarakterİçerenDeğişken);
    }
}
</pre>
<p>Şu görseller de Netbeans ve Eclipse&#8217;teki proje ve konsol alanları :<br />
<img src="http://www.oguzozkeroglu.com/wp-content/uploads/2010/03/netbeans-projects.jpeg" alt="Netbeans proje" title="Netbeans proje" width="276" height="126" class="aligncenter size-full wp-image-274" /><br />
<img src="http://www.oguzozkeroglu.com/wp-content/uploads/2010/03/netbeans-console.jpeg" alt="Netbeans console" title="Netbeans console" width="351" height="146" class="aligncenter size-full wp-image-275" /><br />
<img src="http://www.oguzozkeroglu.com/wp-content/uploads/2010/03/eclipse-projects.jpeg" alt="Eclipse proje" title="Eclipse proje" width="275" height="99" class="aligncenter size-full wp-image-276" /><br />
<img src="http://www.oguzozkeroglu.com/wp-content/uploads/2010/03/eclipse-console.jpeg" alt="Eclipse console" title="Eclipse console" width="480" height="169" class="aligncenter size-full wp-image-277" /></p>
<p>Bize programlama derslerinde öğretilen &#8220;değişken isminde Türkçe karakter olmaz&#8221; artık kural olmaktan çıkıp gelenek haline geliyor sanırım.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/c-yapar-da-java-yapamaz-mi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kuyruk Veri Yapısı &#8211; [Java]</title>
		<link>http://www.oguzozkeroglu.com/kuyruk-veri-yapisi-java/</link>
		<comments>http://www.oguzozkeroglu.com/kuyruk-veri-yapisi-java/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 11:27:34 +0000</pubDate>
		<dc:creator>Oguz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[algoritma]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[data structure]]></category>
		<category><![CDATA[insert]]></category>
		<category><![CDATA[kuyruk]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[remove]]></category>
		<category><![CDATA[veri yapısı]]></category>

		<guid isPermaLink="false">http://www.oguzozkeroglu.com/?p=250</guid>
		<description><![CDATA[Veri yapıları dersinin önemli elemanlarından biri olan kuyruk (queue) yapısını Java ile oluşturmaya çalıştım. Kodlar biraz amatörce oldu ama çalışıyor :) Peki nedir bu kuyruk? Wiki şöyle diyor FIFO (First In Fist Out &#8211; İlk Giren İlk Çıkar) mantığına dayalı kuyruk yapısı ile ilgili yazdığım class: yukarıdaki gibidir.]]></description>
			<content:encoded><![CDATA[<p>Veri yapıları dersinin önemli elemanlarından biri olan kuyruk (queue) yapısını Java ile oluşturmaya çalıştım. Kodlar biraz amatörce oldu ama çalışıyor :)</p>
<p>Peki nedir bu kuyruk? Wiki <a href="http://en.wikipedia.org/wiki/Queue_%28data_structure%29">şöyle</a> diyor</p>
<p>FIFO (First In Fist Out &#8211; İlk Giren İlk Çıkar) mantığına dayalı kuyruk yapısı ile ilgili yazdığım class: </p>
<pre class="brush: java; title: ; notranslate">
public class kuyruk {
	// private değişkenler
	private int maxBoyut;
	private long[] kuyrukDizi;
	private int front;
	private int rear;
	private int elemanSayisi;

	// constructor
	// kuyruk degisken_ismi = new kuyruk (eleman_sayisi);
	public kuyruk (int boyut){
		maxBoyut = boyut;
		kuyrukDizi = new long [maxBoyut];
		front = 0;
	    rear = -1;
	    elemanSayisi = 0;
	}

	// metodlar

	// kuyruk boş mu?
	public boolean bosMu() {
		if (elemanSayisi == 0) return true;
		else return false;
	}

	// kuyruk dolu mu?
	public boolean doluMu() {
		if (elemanSayisi == maxBoyut) return true;
		else return false;
	}

	// kuyruğa eleman ekleme
	public void insert (long eklenecekEleman){
		if (rear == maxBoyut -1) rear = -1;
		rear++;
		kuyrukDizi [rear] = eklenecekEleman;
		elemanSayisi++;
	}

	// kuyruktan eleman çekme
	public long remove(){
		long cikarilacak = kuyrukDizi [front++];
		if (front == maxBoyut) front = 0;
		elemanSayisi--;
		return cikarilacak;
	}

	// kuyruğun sonundaki eleman
	public long kuyrukNerde() {
		return kuyrukDizi[front];
	}

	// kuyruğun boyutu
	public int kuyrukBoyutu() {
		return elemanSayisi;
	}
}
</pre>
<p>yukarıdaki gibidir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oguzozkeroglu.com/kuyruk-veri-yapisi-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

