Merhaba arkadaşlar,

Android 4.0 'da bir tane uygulama geliştiriyorum, uygulama çalıştığı an bazı bilgileri mssql veri tabanında okuması lazım bende ilk yüklenişte main içerisinde JSON kullarak verileri çekmeye çalıştım. Şimdi bu uygulama Android 2.2 işletim sistemi yüklü olan telefonumda sorunsuz çalışıyor ama 4.0 yüklü olan tablet'de çalışmıyor direkt uygulama kapandı diyor onun için hatayıda anlayamıyorum.Tablet için main içerisinde Thread kullanarak denedim ama yine hata veriyor

Url deki kodlar test yapıldı doğru çalışıyor

Bu neden olabilir?

Teşekkürler

Örnek Kod;


**** Main içinde çalışan kod


JSONParser jParser = new JSONParser();

    JSONObject json = jParser.getJSONFromUrl(URL.Url);

    try {

        if (json != null) {

            JSONArray jsonArray = json.getJSONArray("AnaMenu");

            for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject jsonObject = jsonArray.getJSONObject(i);

                String isim = jsonObject.getString("ISIM").toString();
                Toast.makeText(this, isim, Toast.LENGTH_LONG).show();
            }

        } else {
            Toast.makeText(this, "null", Toast.LENGTH_LONG).show();
        }

    } catch (JSONException e) {
        Toast.makeText(this, "hata" + e.getMessage(), Toast.LENGTH_LONG)
                .show();
    }

**** JSONParser sınıfı


public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "UTF-8"), 8); // iso-8859-1 //
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "/n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        // Log.i("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        if (json != null) {
            jObj = new JSONObject(json);
        } else {
            jObj = null;
        }

    } catch (JSONException e) {
        // Log.e("JSON Parser", "Error parsing data "
        // + e.getMessage().toString());
    }

    // return JSON String
    return jObj;

}

soruldu: 06 Oca '13, 15:40

gokhanakgol's gravatar image

gokhanakgol
705687777
cevap kabul oranı: 30%

API uyuşmazlığındandır. Bu tip bir soru daha önce sorulmuştu. Aratırsan bulabilirsin.

(06 Oca '13, 16:11) Turgay Can Turgay%20Can's gravatar image

"Sorun android 3.0 ve üstünde network işlemlerinin thread yani arkaplanda olmadan yapılmasına izin verilmemesi. Mutlaka network işlemlerini(webservisten veri çekmek , resim indirmek vs..) thread ile yapmamız gerekiyor. Aksi takdirde 3.0 ve üzeri android verinin gelmesine izin vermiyor ve null değer döndürüyor. Verdiğiniz linkte dediğinizi başta anlamamıştım fakat sonradan biraz da kendim araştırarak ve bişeyler katarak sorunu hallettim. Teşekkürler."

Yazar : creseos

Site için link : http://www.btsoru.com/questions/3016/android-23-te-calsan-kod-android-40-ve-uzerinde-neden-calsmyor

permanent link

cevaplandı: 07 Oca '13, 01:13

Turgay%20Can's gravatar image

Turgay Can
8.4k63799
cevap kabul oranı: 18%

Merhaba, bilgi için teşekkürler. Thread için şu kodu denedim ama olmadı Android main içinde Thread kullanımının farklı bir şeklimi var.

* Bu kod main içinde yazıyor

Thread thread = new Thread() { @Override public void run() { try { // Web Servisi İşlemleri } catch (Exception e) { e.printStackTrace(); } } };

thread.start();

İyi çalışmalar

(07 Oca '13, 02:53) gokhanakgol gokhanakgol's gravatar image

Merhabalar yazdığınız thread doğru çalışıyor olması.Belki onCreate metodunun içine yazmamış olabilirsiniz.

permanent link

cevaplandı: 07 Oca '13, 08:04

uzo2008's gravatar image

uzo2008
340369
cevap kabul oranı: 13%

Bu tür işleri yeni bir thread oluşturarak değil AsyncTask sınıfını kullanarak yapabilirsiniz. Böylelikle verinin doğru geldiğinden emin olduktan sonra diğer işleri yapma şansınız olur. Aksi takdirde onCreate içinde thread kullanırsanız thread koşmaya başladıktan sonra akış devam edeceği için tüm veri gelmeden veriyi işlemeye çalışacaksınız. Bu durumda da nullPointerException almanız kaçınılmaz.

Bir örnek : link

permanent link

cevaplandı: 08 Oca '13, 07:55

ersinyildiz's gravatar image

ersinyildiz
2.8k31438
cevap kabul oranı: 28%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819
×39

Soruldu: 06 Oca '13, 15:40

Görüntüleme: 1,339 kez

Son güncelleme: 08 Oca '13, 07:55

powered by BitNami OSQA