Android:JSON和ListView最快的刷新选项?

时间:2011-06-07 15:15:02

标签: java android json

我有以下课程:

public class RandomDrunkQuotes extends Activity {
/** Called when the activity is first created. */

   TextView txt;

@Override
public void onCreate(Bundle savedInstanceState) {
    Log.i("uDrew Debug", "Made it into onCreate");

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Log.i("uDrew Debug", "main Layout Loaded");
    //Add AdMob viewer
    AdView adViewer = (AdView)this.findViewById(R.id.adViewer);
    adViewer.loadAd(new AdRequest());

    Log.i("uDrew Debug", "Calling getServerData");
    //Get Server Data and handle
    getServerData();
}
    public static final String KEY_121 = "http://www.url.com/android.php"; //i use my real ip here


    private void getServerData() {

        //Declare variables
        InputStream is = null;
        String result = "";
        String strQuote = "";
        String strID = "";
        String strFName = "";
        String strLInitial = "";
        String strCity = "";
        String strState = "";
        String strDate = "";
        Integer intLikes = 0;
        Integer intHates = 0;
        String strFNameSaid = "";
        String strLInitialSaid = "";
        Integer intBuzz = 0;
        String strBuzzed = "";
        // prepare the list of all records
        List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();

        Log.i("uDrew Debug", "Declared variables");

        //Declare inflater in order to inflate a layout for each quote
        LinearLayout l = (LinearLayout) findViewById(R.id.myMainLayout);
        LayoutInflater linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //http post
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://www.url.com/android.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);
            StringBuilder sb = new StringBuilder();
            String line = null;
            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());
        }
        //parse json data
        try{
            Log.i("uDrew Debug", "Trying to Parse JSON Data");
            //Place JSON data into array one item at a time
            JSONArray jArray = new JSONArray(result);
            //Loop through each record in the database
            //Get ListView
            ListView lv= (ListView)findViewById(R.id.listview);
            // create the grid item mapping
            String[] from = new String[] {"lblQuote", "lblBuzzed", "lblShared", "lblSaid", "lblLikes", "lblHates", "lblLocation", "lblDate"};
            int[] to = new int[] { R.id.lblQuote, R.id.lblBuzzed, R.id.lblShared, R.id.lblSaid, R.id.lblLikes, R.id.lblHates, R.id.lblLocation, R.id.lblDate };

            for(int i=0;i<jArray.length();i++){
                Log.i("uDrew Debug", "Made it into JSONArray Loop");

                //Get this record
                JSONObject json_data = jArray.getJSONObject(i);

                //Put each result into variables for later handling
                strFName = json_data.getString("FName");
                strLInitial = json_data.getString("LInitial");
                strCity = json_data.getString("City");
                strState = json_data.getString("State");
                strDate = json_data.getString("Date");
                strQuote = json_data.getString("Quote");
                intLikes = Integer.parseInt(json_data.getString("Likes"));
                intHates = Integer.parseInt(json_data.getString("Hates"));
                strFNameSaid = json_data.getString("FNameSaid");
                strLInitialSaid = json_data.getString("LInitialSaid");
                intBuzz = Integer.parseInt(json_data.getString("Buzz"));


                Log.i("uDrew Debug", "Made it past JSON Parsing");


                switch(intBuzz){
                    case 1: 
                        strBuzzed = ("One Beer\nSyndrome");
                        break;
                    case 2: 
                        strBuzzed = ("Buzzed");
                        break;
                     case 3: 
                         strBuzzed = ("Drunk");
                        break;
                     case 4: 
                         strBuzzed = ("Trashed");
                        break;
                     case 5: 
                        strBuzzed = "Retarded";
                        break;
                }                       
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("lblQuote", strQuote);
                map.put("lblBuzzed", strBuzzed);
                map.put("lblShared", strFName + " " + strLInitial);
                map.put("lblSaid",strFNameSaid + " " + strLInitialSaid);
                map.put("lblDate", strDate);
                map.put("lblLocation", strCity + ", " + strState);
                map.put("lblLikes", intLikes.toString());
                map.put("lblHates", intHates.toString());
                fillMaps.add(map);



            }//End For loop
         // fill in the grid_item layout
         SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.myviews, from, to);
         lv.setAdapter(adapter);
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }

我想知道如何以最快的方式刷新从服务器检索到的数据。现在我在选项按钮中有一个刷新按钮,调用getServerData();但这似乎需要很长时间。欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

您应该从AsyncTask方法创建getServerData()并调用doInBackground()方法。此方法必须从服务器返回数据。然后在onPostExecute()方法中,您应该使用此数据填充ListView