在ListView中显示JSON数组 - 组合

时间:2016-08-25 17:03:21

标签: java android json listview

我知道这个问题不断出现,但我的代码与其他代码略有不同,所以我不知道我需要在哪里进行更改。
我想将数据(“fest_name”)放入ArrayList(“节日”)并将其显示在ListView中。

这是我的JSON代码:

public void getFestivals() {
    Thread thread_getdata = new Thread(new Runnable() {
        @Override
        public void run() {
            try {

                HttpClient httpclient = new DefaultHttpClient();

                String link = "http://pou-pou.de/stagedriver/android/uebersicht.php";
                HttpPost httppost = new HttpPost(link);

                ResponseHandler<String> responseHandler = new BasicResponseHandler();
                final String response = httpclient.execute(httppost,
                        responseHandler);
                final ArrayList<String> festivals = new ArrayList<String>();
                Log.i("Response", "Response : " + response);
                JSONArray jsonarray = new JSONArray(response);
                for (int i = 0; i < jsonarray.length(); i++) {
                    JSONObject jsonobj = jsonarray.getJSONObject(i);
                    final String fest_name = jsonobj.getString("fest_name");
                    festivals.add(fest_name);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                        }

                    });

                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    });
    thread_getdata.start();
}

这适用于ListView:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fahrt_anbieten1);
    ListView lvFestivals = (ListView) findViewById(R.id.lvFestivals);
    getFestivals();


    ListAdapter festivalsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, festivals);
    lvFestivals.setAdapter(festivalsAdapter);

}

我只是不知道如何结合这两个:如果我运行应用程序,我只是得到一个空页,但没有真正的错误。
如果有人能提供帮助,我会很高兴的!

2 个答案:

答案 0 :(得分:0)

如果放入循环

,适配器不成问题
public void getFestivals() {
Thread thread_getdata = new Thread(new Runnable() {
    @Override
    public void run() {
        try {

            HttpClient httpclient = new DefaultHttpClient();

            String link = "http://pou-pou.de/stagedriver/android/uebersicht.php";
            HttpPost httppost = new HttpPost(link);

            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            final String response = httpclient.execute(httppost,
                    responseHandler);
            final ArrayList<String> festivals = new ArrayList<String>();
            Log.i("Response", "Response : " + response);
            JSONArray jsonarray = new JSONArray(response);
            for (int i = 0; i < jsonarray.length(); i++) {
                JSONObject jsonobj = jsonarray.getJSONObject(i);
                final String fest_name = jsonobj.getString("fest_name");
                festivals.add(fest_name);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                    }

                });

            }
               ListAdapter festivalsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, festivals);
               lvFestivals.setAdapter(festivalsAdapter);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

});
thread_getdata.start();
}

将它放在ListView变量OnCreate

ListView lvFestivals;
    @Override
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.fahrt_anbieten1);
      lvFestivals = (ListView) findViewById(R.id.lvFestivals);
      getFestivals();

}

答案 1 :(得分:0)

首先,不建议使用Thread发出网络请求。

其次,Apache HTTP在简单的网络请求周围有一些额外的代码。如果您可以改为使用Volley(您需要compile 'com.android.volley:volley:1.0.0'

如果您实施以下代码,则应获得something like this listview

public class FestListActivity extends AppCompatActivity 
        implements Response.Listener<JSONArray>, Response.ErrorListener {

    private ListView mListView;
    private ArrayAdapter<String> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(android.R.layout.list_content);
        mListView = (ListView) findViewById(android.R.id.list);
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        mListView.setAdapter(mAdapter);

        getFestivals();
    }

    private void getFestivals() {
        String festURL = "http://pou-pou.de/stagedriver/android/uebersicht.php";
        RequestQueue queue = Volley.newRequestQueue(this);
        JsonArrayRequest req = new JsonArrayRequest(festURL, this, this);
        queue.add(req);
    }

    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Error", error.getMessage());
    }

    @Override
    public void onResponse(JSONArray response) {
        mAdapter.clear();
        try {
            for (int i = 0; i < response.length(); i++) {
                final JSONObject festObj = response.getJSONObject(i);

                int festId = Integer.valueOf(festObj.getString("id_fest"));
                String festName = festObj.getString("fest_name");

                mAdapter.add(festId + " - " + festName);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}