2016-04-26 29 views
0

計劃從網絡上獲得JSON和添加到ListView的,但我有錯誤 我的代碼:的Android只有原來的線程創建視圖層次可以觸摸其觀點

Thread thread =new Thread() 
     { 
      @Override 
      public void run() { 
       Looper.prepare();//En başta gerekli 
       HttpClient client = new DefaultHttpClient(); 

HttpConnectionParams.setConnectionTimeout(client.getParams(),5000); 
       try { 
        HttpPost post = new HttpPost("http://"+MainActivity.baglanti_adres+"/not/notlar_oku.php"); 
        List<NameValuePair> gonderilenler = new ArrayList<NameValuePair>(2);//Verileri göndermek için arraylist tanımlama 
        gonderilenler.add(new BasicNameValuePair("eposta",kullanici_eposta)); 
        post.setEntity(new UrlEncodedFormEntity(gonderilenler,"UTF_8"));//post'a verileri UTF-8 olarak ekleme 
        HttpResponse response = client.execute(post);//Verileri gönderme 
        if(response!=null)//Sayfadan gelen veri boş değil ise 
        { 
         BufferedReader oku = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));//Sayfadan gelen veriyi okumak oluşturma 
         StringBuilder kodlar =new StringBuilder();//Kodların eklendiği string 
         String satir;//döngüde kullanmak için string 
         while ((satir = oku.readLine())!=null)//döngü ile sayfadaki kodları alma 
         { 
          kodlar.append(satir+"\n");//Satir satır kodları ekleme 
         } 
         oku.close(); 
         ArrayList<String> notlar_dizisi = new ArrayList<String>();//Gelen notları eklemek için arraylist 
         JSONArray json_dizi = new JSONArray(kodlar.toString());//kodları json dizisi yapma 
         if(json_dizi.length()>0)//json dizisinin boyutunu kontrol etme 
         { 
          for (int i =0;i<json_dizi.length();i++) 
          { 
           notlar_dizisi.add(json_dizi.getJSONObject(i).getString("not")+ " - "+json_dizi.getJSONObject(i).getString("Tarih")+ " - "+json_dizi.getJSONObject(i).getString("ID"));//Kullanıcıya ait notları arraliste alma 
          } 
         } 
         ArrayAdapter<String> notlar_adapter =new ArrayAdapter<String>(Anasayfa.this,android.R.layout.simple_list_item_1,android.R.id.text1,notlar_dizisi);//Arraylistteki notları listview e atmak için array adapter oluşturma 
         notlar.setAdapter(notlar_adapter);//Notları listviewe ekleme 
        } 
       } 
       catch (Exception e) 
       { 
        Log.e("Hata1!",e.getMessage()); 
       } 
       Looper.loop(); 
      } 
     }; 
     thread.start();//Veri göndermek için thread oluşturma ve başlatma 
+0

請格式化您的問題並提供更多信息並編碼什麼/何時/你在哪裏試圖做某事 –

+0

基督徒你能幫助我嗎?我是新來的,我不知道我該怎麼做。 –

+0

簡單的答案:使用AsyncTask&Volley庫。 – ElDuderino

回答

0

嘗試把這一行:notlar.setAdapter (notlar_adapter);進入和UI線程。

MainActivity.this.runOnUiThread(new Runnable() { 
    public void run() { 
     notlar.setAdapter(notlar_adapter); 
    } 
}); 
+0

沒有工作 –

0

的方法是不是很安卓,請看看Asynctask,把你的請求代碼爲doInBackground(...)使用onPostExecute監聽器得到的結果在您的活動或片段。這樣你就不會遇到線程問題。如果只是一個快速測試,您可以使用Handler(來自android.os)在主線程上運行代碼(UI更改必須位於主線程上)

new Handler().post(new Runnable() { 
    @Override 
    public void run() { 
     // code which changes UI 
     } 
    }); 
相關問題