2013-03-11 54 views
0

我遇到了我的應用程序的問題。我試圖從Android中的自定義類中的數據庫傳遞json數據,然後將其顯示在列表中。當我運行我的應用程序時,沒有任何反應,沒有錯誤,沒有顯示列表如果任何人都可以幫助,我將非常感激! :)將json數據傳遞給一個自定義對象 - 安卓android

所有的網絡東西是在異步完成,我試圖返回一個對象數組,所以我懷疑這可能是問題是在這裏,否則當我將字符串從httphandler類轉換爲JSONArray。

這是我的主要活動

package com.example.test1; 



import java.util.ArrayList; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.Activity; 
import android.net.ParseException; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class clubpage extends Activity { 

class Programme { 

    public String name; 
    public String event; 
    public String price; 

} 

String clubphp = "http://10.0.2.2/corkgaa/Nemo.php"; 
String progString; 
ArrayList<Programme> Programmedata = new ArrayList<Programme>(); 
ListView clublistview = (ListView)findViewById(R.id.listview1); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.clubpage); 

    new Dbhandler().execute(clubphp); 

    ArrayAdapter<Programme> adapter = new ArrayAdapter<Programme>(this, 
      android.R.layout.simple_list_item_1, Programmedata); 

    clublistview.setAdapter(adapter); 


} 

public class Dbhandler extends AsyncTask<String, Void, ArrayList<Programme>> { 

    protected ArrayList<Programme> doInBackground(String... arg0) { 

ArrayList<Programme> arraydata = new ArrayList<Programme>();   
progString = httphandler.HttpGetExec(clubphp); 

try{ 

    JSONArray jArray = new JSONArray(progString); 
    JSONObject json_data=null; 

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

     json_data = jArray.getJSONObject(i); 
     Programme Progresult = new Programme(); 

     Progresult.name = json_data.getString("Name"); 
     Progresult.event = json_data.getString("Event"); 
     Progresult.price = json_data.getString("Price"); 

     arraydata.add(Progresult); 

     } 
    } 
    catch(JSONException e1){ 

     } 
    catch (ParseException e1) { 
     e1.printStackTrace(); 
     } 
return arraydata; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Programme> result) { 

    Programmedata = result; 
    } 

} 




@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
} 

}

的HttpHandler類在這裏:

package com.example.test1; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import android.util.Log; 

public class httphandler { 

//Main Dev setup 

public static String HttpGetExec (String URI) { 


    // TODO Auto-generated method stub 
       String result = "no response"; 
       InputStream is = null; 
       StringBuilder sb = null; 


       //http post 
       try{ 
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost("http://10.0.2.2/corkgaa/Nemo.php"); 
        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity(); 
        is = entity.getContent(); 
        } 
       catch(Exception e){ 
         Log.e("log_tag", "Error in http connection"+e.toString()); 
        } 

       //convert response to string 
       try{ 
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
        sb = new StringBuilder(); 
        sb.append(reader.readLine() + "\n"); 
        String line="0"; 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
         } 
        is.close(); 
        result=sb.toString(); 
        } 
       catch(Exception e){ 
        Log.e("log_tag", "Error converting result "+e.toString()); 
        } 

       return result; 

       //aa=new ArrayAdapter<String>(clubpage.this, R.layout.listrow, R.id.title, result); 
       //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.listrow, R.id.title, result); 
       //listview.setAdapter(aa); 

} 

}

+0

您是否看到任何已記錄在Logcat輸出 – 2013-03-11 13:58:41

+0

網絡中的錯誤(http錯誤)應該被[asyncronously]訪問(http://developer.android.com/training/basics/network-ops/connecting。 html#AsyncTask) – 2013-03-11 14:01:29

+0

沒有http錯誤.... – 2013-03-11 14:11:17

回答

1

移動此行到您onCreatesetContentView

clublistview = (ListView)findViewById(R.id.listview1); 

並移動以下行onPostExecute在異步任務:

ArrayAdapter<Programme> adapter = new ArrayAdapter<Programme>(this, 
      android.R.layout.simple_list_item_1, Programmedata); 

clublistview.setAdapter(adapter); 

當你的異步任務執行,考慮顯示某種進度指示器。

+0

非常感謝! – 2013-03-11 14:47:38

相關問題