程序从web获取json并添加到ListView但是我有错误 我的代码:
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)
尝试这一行:notlar.setAdapter(notlar_adapter);进入和使用ui线程。
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
notlar.setAdapter(notlar_adapter);
}
});
答案 1 :(得分:0)
方法不是Android,请查看Asynctask,将您的请求代码放入doInBackground(...),使用onPostExecute中的Listener将结果输出到您的活动或片段。这样您就不会遇到线程问题。如果它只是一个快速测试,您可以使用Handler(来自android.os)在主线程上运行您的代码(Ui更改必须在主线程上)
new Handler().post(new Runnable() {
@Override
public void run() {
// code which changes UI
}
});