4

解析されたJsonデータをListviewに保存しようとしましたが、機能していません。

サーバーからいくつかのデータ(テーブルの形式)を取得し、それをJsonオブジェクトに解析しました。コード全体がうまく機能しました。Androidアクティビティで「トースト」を使用すると、取得したデータが表示されます。この解析されたデータをリストビューに保存するのを手伝ってください。

これが私のコードです

public void clickbutton(View v) {
        try {

            // Log.i(getClass().getSimpleName(), "send  task - start");
            HttpParams httpParams = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpParams,
                    TIMEOUT_MILLISEC);
            HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
            //
            HttpParams p = new BasicHttpParams();
            // p.setParameter("name", pvo.getName());
            p.setParameter("user", "1");

            // Instantiate an HttpClient
            HttpClient httpclient = new DefaultHttpClient(p);
            String url = "http://bhavit.xtreemhost.com/webservice1.php?user=1&format=json";
            HttpPost httppost = new HttpPost(url);

            // Instantiate a GET HTTP method
            try {
                Log.i(getClass().getSimpleName(), "send  task - start");
                //
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                        7);
                nameValuePairs.add(new BasicNameValuePair("details", "1"));

                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                ResponseHandler<String> responseHandler = new BasicResponseHandler();
                String responseBody = httpclient.execute(httppost,
                        responseHandler);
                // Parse
                JSONObject json = new JSONObject(responseBody);
                JSONArray jArray = json.getJSONArray("posts");
                ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

                for (int i = 0; i < jArray.length(); i++) {
                    HashMap<String, String> map = new HashMap<String, String>();
                    JSONObject e = jArray.getJSONObject(i);
                    String s = e.getString("post");
                    JSONObject jObject = new JSONObject(s);

                    map.put("time", jObject.getString("time"));
                    map.put("latitude", jObject.getString("latitude"));
                    map.put("longitude", jObject.getString("longitude"));

                    mylist.add(map);

                }
                Toast.makeText(this, responseBody, Toast.LENGTH_LONG).show();
                **String[] columns = new String[] { "Time", "Latitude", "Longitude" };
                int[] renderTo = new int[] { R.id.time, R.id.latitude, R.id.longitude };

                ListAdapter listAdapter = new SimpleAdapter(this, mylist, R.layout.geo_ponts_list, columns, renderTo);
                setListAdapter(listAdapter);**

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // Log.i(getClass().getSimpleName(), "send  task - end");


        } catch (Throwable t) {
            Toast.makeText(this, "Request failed: " + t.toString(),
                    Toast.LENGTH_LONG).show();
        }

    }

    private void setListAdapter(ListAdapter listAdapter) {
        // TODO Auto-generated method stub

    }

    public class Data {
        // private List<User> users;
        public List<details> users;

        // +getters/setters
    }

    static class details {
        String latitude;
        String longitude;
        String time;

        public String Longitude() {
            return longitude;
        }

        public String Latitude() {
            return latitude;
        }

        public String Time() {
            return time;
        }

        public void setUserName(String value) {
            longitude = value;
        }

        public void setidusers(String value) {
            latitude = value;
        }

エラーはありませんが、アクティビティにはリストビューに値が表示されませんが、Toastを使用して値を確認できます。 トーストを使用したアクティビティの出力

これが私のgeo_ponts_list.xmlファイルです

<TextView android:id="@+id/time"
     android:textSize="16sp"
     android:textStyle="bold"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"/>

 <TextView android:id="@+id/latitude"
     android:textSize="16sp"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"/>

 <TextView android:id="@+id/longitude"
     android:textSize="16sp"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"/>  


4

3 に答える 3

4

最初に言及すること:

HashMapが正しい値を取得しているかどうかをもう一度確認してください。

次のようにforループに値を記録しますLog.i("item",jObject.getString("time"));

custom list Adapterそして第二に、あなた自身のクラスを作ります、

この例をあなたと同じように使用する

于 2012-04-17T05:43:05.600 に答える
2

使用しているSimpleAdapterは大文字と小文字を区別する必要があるようですか?列として「Time」、「Latitude」、および「Longitude」を渡していますが、JSONオブジェクトには「time」、「latitude」、および「longitude」が含まれています。

于 2012-04-13T19:32:19.043 に答える
2

私はあなたのコードを試してみました、そしてクエントンが言ったように、それはリストビューが何も表示しないようにするケースの問題です。

**String[] columns = new String[] { "Time", "Latitude", "Longitude" };
            int[] renderTo = new int[] { R.id.time, R.id.latitude, R.id.longitude };

            ListAdapter listAdapter = new SimpleAdapter(this, mylist, R.layout.geo_ponts_list, columns, renderTo);
            setListAdapter(listAdapter);**

値がスモールキャップスになるようにcolumns変数を変更する必要があります。それは私のために働いた。

String[] columns =  new String[] {"time", "latitude', 'longitude'};
于 2012-04-21T03:57:42.663 に答える