2

サーバーからデータを取得するフラグメントにListViewを作成しようとしましたが、これまでのところ成功していません。私は次のサイトを使用しています:Vogellaは、ListViewをフラグメントに実装する方法を学習しましたが、サーバーからデータを入力しようとすると問題が発生します。

package com.example.ips_alpha;

import java.util.ArrayList;
import java.util.HashMap;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TableLayout;

public class Gold_Visitors2 extends ListFragment{

//JSON Node names (level, sensorID, value)
String SPACES = "spaces"; //String array name of php
String LEVEL = "level";
String SENSORID = "sensorID";
String VALUE = "value";
//pspace JSONArray
JSONArray pspace = null;
String[] levels = new String[]{LEVEL, SENSORID, VALUE};

int [] ids = new int[]{};

private static String url = "http://www.example.com/getUsers12.php";


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View view = inflater.inflate(R.layout.fragment_gold_visitors, null);


    new MyAsyncTask().execute();
    return view;

}

class MyAsyncTask extends AsyncTask<String, Integer, ArrayList<HashMap<String, String>> > {


    //Hashmap for ListView
    ArrayList<HashMap<String, String>> levelList = new ArrayList<HashMap<String, String>>();

    @Override
    protected ArrayList<HashMap<String, String>>doInBackground(String... params) {

//Creating JSON Parser instance
        JSONParser jParser = new JSONParser();

        //getting JSON string from URL

        JSONObject json = jParser.getJSONFromUrl(url);

        try {
            //Getting Array of spaces
            pspace = json.getJSONArray(SPACES);

            //looping through all spaces
            for(int i = 0; i < pspace.length(); i++){
                JSONObject p = pspace.getJSONObject(i);

            //Storing each json item in variable
                String level = p.getString(LEVEL);
                String sensorID = p.getString(SENSORID);
                String value = p.getString(VALUE);
            //creating new HashMap

                HashMap<String, String> map = new HashMap <String, String>();
            //adding each child node to HashMap Key =>
                map.put(LEVEL, level);
                map.put(SENSORID, sensorID);
                map.put(VALUE, value);

            //adding HashList to ArrayList
            }
        }catch(JSONException e){
            e.printStackTrace();

        }
        return levelList;

    }

    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> levelList) {

        ListAdapter adapter = new SimpleAdapter(getActivity(), levelList, R.layout.fragment_gold_visitors, levels, ids);
        setListAdapter(adapter);


    }


}
}

レイアウトファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:id="@id/android:list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

現在、私のアプリはコンパイル中でクラッシュしませんが、ListViewを表示するはずのフラグメントにアクセスすると、空白になります。私はASyncTaskとアダプターをめちゃくちゃにしていると思います、どんな助けでも大歓迎です。

4

1 に答える 1

0

に戻りますが、取得した JSON から項目を追加levelListdoInBackgroundていません。あなたが持っているのは空ArrayListの だけなので、ListViewは空です。

于 2013-03-04T00:39:00.040 に答える