我有下面这个方法,它连接到db并返回一个json数组。
private String getServerData(String returnString) {
       InputStream is = null;
       String result = "";
        //the year data to send
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("year","1970"));
        //http post
        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(KEY_121);
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                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());
        }
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                   // JSONObject json_data = jArray.getJSONObject(i);
                    JSONObject json_data = jArray.getJSONObject(i);
                    Log.i("log_tag","id: "+json_data.getInt("id")+
                            ", name: "+json_data.getString("name")+
                            ", sex: "+json_data.getInt("sex")+
                            ", birthyear: "+json_data.getInt("birthyear")
                    );
                        //Get an output to the screen
                        returnString += "\n\t" + jArray.getJSONObject(i); 
                }
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
                returnString += result.toString();
        }
        return returnString; 
    }   然后我想从外部调用这个方法,但是作为java的新手,我不确定如何把它放在hm对象中,就像被注释掉的那个一样。请参阅下面的代码
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView listView = (ListView)findViewById(R.id.list);
        myBooks = new ArrayList<HashMap<String,Object>>();
        HashMap<String, Object> hm;
        hm = new HashMap<String, Object>();
        List<String> list=new ArrayList<String>();
        list.add(getServerData(KEY_121));
        //With the help of HashMap add Key, Values of Book, like name,price and icon path 
       /* hm = new HashMap<String, Object>();
        hm.put(BOOKKEY, "Android");
        hm.put(PRICEKEY, "Price Rs: 500");
        hm.put(IMGKEY, R.raw.android); //i have images in res/raw folder
        myBooks.add(hm);
 SimpleAdapter adapter = new SimpleAdapter(this, myBooks, R.layout.listbox, 
                new String[]{BOOKKEY,PRICEKEY,IMGKEY}, new int[]{R.id.text1, R.id.text2, R.id.img});
        listView.setAdapter(adapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    }我这里的对象是获取返回的字符串,并通过使用hm对象将其添加到myBooks对象中,就像在注释代码中一样。
谢谢
发布于 2011-11-21 05:13:36
由于getServerData()需要一段时间才能执行(它包含一个http请求),所以您不能直接从UI线程运行它。(onCreate()直接位于UI线程上,UI线程永远不应该暂停)。
这意味着您必须创建一个并从您的AsyncTask的doInBackground()调用getServerData()。您可以在AsyncTask的onPostExecute()中返回display JSON结果。
这意味着您想要传递一个向AsyncTask显示结果位置的。您希望将其设置为SoftReference,以防在获取JSON时发生什么情况(就像您离开活动一样)。
我建议您阅读并使用创建自己的项目。启动并运行后,将该映像下载器修改为JSON下载器。这篇文章对您应该很有帮助,因为它还使用Adapter在列表视图中显示项。
您的示例在几个方面与本文中的示例不同,但我认为它实际上更简单,所以如果您理解了本文中的代码,那么您随后就能够让代码正常工作。
参考:
发布于 2011-11-21 05:57:28
下面是我所做的,它工作得很好
1-我没有返回字符串,而是将结果原样返回给调用。
2之后,我构建了一个字符串,然后我可以像这样很好地解析它
 returnedResult = this.getServerData(KEY_121);
       try {
        JSONArray jArray = new JSONArray(returnedResult);
        for(int i=0;i<jArray.length();i++){
            // JSONObject json_data = jArray.getJSONObject(i);
            JSONObject json_data = jArray.getJSONObject(i);
            hm = new HashMap<String, Object>();
            hm.put(IDKEY, json_data.getInt("id"));
            hm.put(NAMEKEY, json_data.getString("name"));
            hm.put(IMGKEY, R.raw.android);
            myBooks.add(hm);
        }希望这对这里的人有帮助,谢谢
https://stackoverflow.com/questions/8204700
复制相似问题