21 Ekim 2013 Pazartesi

android.os.NetworkOnMainThreadException Hatası

Merhabalar
  Bu hatanın nedeni;android işletim sisteminin arayüz ile webe erişimi ayırmasından kaynaklanmaktadır.Yani Aynı anda hem arayüzde hemde webde işlem yapamazsınız.Bu işlemleri farklı çalışma alanlarına bölmeniz gerekmektedir.
  Bu sorunun İki Çözümü mevcuttur.Birincisi her bir çalışma alanını threadlere bölmek ikincisini bir kaynakta gördüm ancak kesin  sonuç verdiğinden emin değilim.
Bu işlemin Örnek kodu şu şekildedir.

public class Anasayfa extends Activity {
private TextView textView;
private String CONTENTS_URL = "http://www.numan.com/api/rawcontents";
@Override
protected void onCreate(Bundle savedInstanceState) {
final Handler mHandler = new Handler();
super.onCreate(savedInstanceState);
setContentView(R.layout.anasayfa);

downloadList();

final Runnable mUpdateResults = new Runnable() {
public void run() {

AnimateandSlideShow();
}
};
AnimateandSlideShow();
}
private void downloadList() {
Runnable runnable = new Runnable() {

@Override
public void run() {
getContentList();
}
};
Thread thread = new Thread(runnable);
thread.start();
}
private void getContentList() {
try {
String json = HttpUtilities.get(CONTENTS_URL);
Log.i("Konu", "İndirildi " + json);
final List<Content> contentList = JsonManager
.parseGetContentJson(json);
Log.i("Konu", "Ayrıştırılan adet " + contentList.size());
Runnable action = new Runnable() {

@Override
public void run() {
for (Content c : contentList) {
willSHownText = willSHownText + "               "
+ c.getContentTitle();
}
textView.setText(willSHownText);
}
};
runOnUiThread(action);
} catch (Exception e) {
Log.e("Konu", "İndirme hatası" + e.getClass().getName()
+ " " + e.getMessage(), e);
}
}
}
Yukarıdaki örnekde olduğu gibi webden içerik almak isterseniz thread açıcaksınız.İçeriği aldıktan sonra arayuzde göstermek istioyrsanız tekrarthread açmak zorundasınız. android.os.NetworkOnMainThreadException Hatasının çözümü budur.

17 Eylül 2013 Salı

eclipse plugin upgrade hatası

Selamlar
     Eclipse android sdk tanıttık'tan sonra yeni bir proje yaratılırken; sdk yi upgrade etmemiz gerektiğini söyleyen bir hata ile karşılaştım ve çözümünü de sizinle paylaşmak istedim.Bu hata sdk yin son versiyonundan kaynaklanmaktadır.
Yapılacak işlem ise çok basittir.
Android sdk yı açın.Ve vereceğim dizine ulasın.|.......sdk\tools\templates\activities\BlankActivity\template.xml.Bu dosyada bazı su satırı comment edin" <dependency name="appcompat" version="v7" />"
Şimdi aynı comment işlemini başka bir dosya için yapacağız.|sdk\tools\templates\activities\MasterDetailFlow\template.xml.
" <dependency name="support" version="v4" />
    <dependency name="android-support-v4" revision="8" />"bu işlemide tamamladıktan sonra eğer başka bir sorun yoksa proje oluşturabiliriz.

25 Şubat 2013 Pazartesi

Java da writer

Writer da 
Su kod yazılırsa belirtilen dizinde istenilen dosyayı olusturur ve onun içine istenilen içerigi yazar Ancak klasor
açmaz ve eski verıyı aksı yapılmazsa eskı verıyı ezer.
Basit bir örnekle açıklayacak olursak.
String file="D:\\numan\\new.txt";
        FileWriter fw=new FileWriter(file);
        BufferedWriter bw=new BufferedWriter(fw);
        bw.write("java\r\n");
        bw.write("Java Enterprice \r\n");
        bw.write("Java Android \r\n");
        bw.close();
Şeklindedir.Ancak eski veriyi silmeden yapmak ıstersek 
FileWriter fw=new FileWriter(file,true)eklenır.
exceptionlu writer versiyonu şudur.
public static void main(String[] args) throws IOException {
        
        
        try{
            
            String file="D:\\numan\\new.txt";
            FileWriter fw=new FileWriter(file);
            BufferedWriter bw=new BufferedWriter(fw);
            bw.write("java\r\n");
            bw.write("Java Enterprice \r\n");
            bw.write("Java Android \r\n");
            bw.close();
            
            
            

        
    }catch(Exception e){
        System.out.println("Yanlıs Dosya Arama");
        e.printStackTrace();
    }
        

    şeklinde olmalıdır.Neden exception açıyoruz derseniz hata takibini sağlamak hatanın farklı platformlardan dönüşüm sağlayarak client tarafını bulmasını sağlar.Bunu da her dizinde exception isteyerek yapar.

Javada Stream , Encoding, Buffer


Stream
    Stream yavaş gelen akım demektir.Yavaş gelen veri demektir.Dil platformunda ise dosyaya yazma ve okuma olarak karşımıza çıkar.Stream yapısı ozellıkle yazıcılarda scannerlarda gecelıdır.Bilgisayar bilimlerinde bunun adı I/O dur Yani input output tur.Bunlar normalde byt larla çalısır.Ancak metin geldiği zaman  ıse bu byt kodların karaktere cevrılmesı gerekır.Bunada encoding denir.Gene byttır ancak karakter olarak gozukur.Ornek 15 sayıdır.1 ve 5 karakterdır.
    javada herşey unıcode dır.Encodıngler iso-8859-9 latin-5 dir.Java bunlarla ugrasmamak ıcın reader ve writer diye iki class olusturmustur.Türkçe makınada calısdıgında türkce olarak algılıyor herhangi başka bir dilede başka.İnput stream ve output stream byt olark
bu ıkı clası da olarak okur.
Buffer stok zula anlamına geliyor.Her okumada tekrar tekrar verı almayı engellemek ıcın kullanılır.input
ve output buffer vardır.
Javada I/O ınput output karısıkdır.java veri okumaya satır satır ızın verır.yanı kısaca once okuyayım sonrada vereyım seklınde bır ıslem yapmaya izin vermez.Bir satır oku kullanıcıya ver oku ver trafıgı seklınde
olustur demıstır.

17 Şubat 2013 Pazar

Jdbc Transaction

Javada Transaction

Javada transaction bir işlemi yapar iken veya kaydı database e atarken paralel veya bağımlı bağımlı olan ve ayrılmaması gereken yapılar için tasarlanmıştır.Kısaca bir db connection gerçekleşmeyen bağımlı bir connection dan ötürü durdurulur yada en doğrusu kontrol edilir.
Tranasction terimleri 3 tanedir
1.begin : İşlemi sorguyu default olarak başlatır.
2.commit : İşlemi işletir kullanılmak üzere hafızaya alır
3.rollback : Geri sarar

Transaction da commit kullanımı örneğini aşağıdaki örnekle açıklamaya çalışalım


  1.   public class transactionTest {

  2. public static void main(String[] args) throws ClassNotFoundException,
  3. SQLException {
  4. Class.forName("com.mysql.jdbc.Driver");

  5. Connection connection = DriverManager.getConnection(
  6. "jdbc:mysql://localhost:3306/my_db2", "root", "godoro");
  7. connection.setAutoCommit(false);
  8. String sql = "insert into  customer(customerName,totalDebit) values(?,?)";

  9. PreparedStatement statement = connection.prepareStatement(sql);
  10. statement.setString(1, "Adnan Oktar");
  11. statement.setDouble(2, 7200);
  12. statement.executeUpdate();
  13. burdakı versıyonda sql ı bozdugumuz szamna hıcbırını yazmaz a
  14. PreparedStatement statement1 = connection.prepareStatement(sql);
  15. statement1.setString(1, "Ahmet Mahmut Ünlü");
  16. statement1.setDouble(2, 3900);
  17. statement1.executeUpdate();
  18. PreparedStatement statement2 = connection.prepareStatement(sql);
  19. statement2.setString(1, "Fethullah Gülen");
  20. statement2.setDouble(2, 7800);
  21. statement2.executeUpdate();
  22. connection.commit();
  23. connection.close();

  24. }
  25. Bu ornekte gördüğünüz üzere 9.satırdaki kırmızı ıle işaretli kod bloğu ile connection hafızaya yazılmış yani işletilmiş 29.satıra gelince yani işlem hatasız tamamlanıncada database e set işlemi gerçekleştirilmiştir.
Bunun aksi  durumda ise denendiği zaman işlemi kesip attığını göreceksiniz.
Örnek
PreparedStatement statement1 = connection.prepareStatement(sql+blabla);
şeklinde hata vericek sonuclu bir kod blogu oldugunda işlemi tamamlamayıp yarım bıraktıgına şahit olabilirsiniz.
Bozulan veya hatalı bir kod bloğunun kullanımı bu şekildedir.Bu sıralı bağımlı işlemlerde tasarımcıların işine yarayabildiği gibi hata verene,okunana  kadar devam edilmesi istenen kod bloklarında da kod tasarımcılarının işine yrayabilir şöyleki;
Oluşturulan her işlem bloğundan sonra connection commit edilirse hata verene kadar uygulama çalıştırılabilir.
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, "Adnan Oktar");
statement.setDouble(2, 7200);
statement.executeUpdate();
connection.commit();
şeklinde.


2 Şubat 2013 Cumartesi

Google Adwords Hizmeti nedir ve Hesap Lar Nasıl Oluşur


Google Dağınık bilgileri toplayıp derleyen bir arama motorudur.Kullanıcılar Google Mülkiyetleriniz ziyaret ederek aradıklarına ulaşırlar.Bir kullanıcı "Şansımı Denemek İstiyorum"u tıklarsa, kullanıcı doğrudan Google arama sonuçlarındaki ilk web sitesine veya belgeye gider.Bir firma google ın arma ağı hizmetlerinden olan fiziki arama ya para veya menfaati bir şey sunarak yer edinemez.Ancak sağ tarafda ve bazen üst te ççıkan adwords reklamlarında bunu yapabilir.
Google Bu işi profesyonel olarak yapmaktadır eşitlikci bir rekabet ortamı sağlayarak herkezin bütçesi dogrultusunda bir reklam rekabetine girmesine izin vermektedir.
GOOGLE ADWORDS HESAPLARI
Google bu işi yürütmek için bir adwords hesabı oluşturma ve bunu gerektiğinde müşteri ve müşteri yönetici hesabı olmak üzere iki kısıma ayırmıştır.müşteri hesabı şirketin veya tüzel kişinin hesabından oluşturlur ve burdan müşteri yönetici hesabına izin verilerek adwords hizmeti başkları tarafından sağlanmış olur.Müşteri hesabından gerektiğinde müşteri yönetici hesabını iptal edebilir ve bildirimleri alabilirsiniz.müşteriler gbi müşteri yöneticiside gerektiğinde hesaplar arsındaki bağlantıyı sonlandırabilir.
Not:Müşteri yöneticisi arayan firmalra google bu konuda da hizmet vermektedir

22 Ocak 2013 Salı

Javada enum nasıl kullanılır.Enum nedir.


Merhabalar
Bu yazımda java da enum nedir ve nasıl kullanılır.Ayrıca javadaki geçmişini anlatağım.
Java enum' u C deki gibi kabul etmez.Gereksiz görür.Enum un işlevini bunun için interface le halledilebileceğini
Düşünmüşlerdir.Ve java beşe gelene kadar java da enum kullanımı bu şekildedir.
Sebebi ise Enumlardaki değer ve İçeriklerin değişik olmasıdır.Örneğin Amerikada ki hafta başlangıcı pazardan
başlar.Atanan değerin 1 den pazar gününden başlatılmış olması türkiye için sorun ve problemdir.Bundan dolayı java enumu
belli bir süre kabul edilmemiştir.
Inteface li enum versiyon kullanım vbe yaratımı şu şekildedir.
 intarface days{
int MONDAY=0;
int Tuesday=1;
int WEDNESDAY=2;
               }
 
 public class DaysTest {
 public static void printDay(int day){

switch(day){

case 0:System.out.println("pazartesi");break;
case 1:System.out.println("Salı");break;
case 2:System.out.println("Çarşamba");break;
default : System.out.println("bilinmeyen gün");
}
 }

public static void main(String[] args) {

 int day=Days.TUESDAY;
 printDay(day);
 printDay(Days.MONDAYS);
 printDay(32);
}

 }
Bu kodu n console çıktısı ise şu şekildedir.
Salı
pazartesi
bilinmeyen gün


Şeklindedir.
Java 5 de  gelince ise javada enum kullanımı şu şekilde dir.
Bir enum oluşturulur.:
  enum Day{
  MONDAY,
  TUESDAY,
  WEDNESDAY;
  }
  Bir class oluşturulur.Ve içerik şu şekildedir.Her gün için bir case yaratılarak şartlandırılmış olur.Örnek


public class DayTest2 {

public static void printDay(Day day){
switch(day){
case MONDAY:System.out.println("Pazartesi");

}

}}