Listview没有填充并且是空的。 Arrayadapter似乎工作正常

时间:2017-03-26 04:50:14

标签: java android listview

我是Android的新手,所以如果这是一个平凡的问题,我很抱歉。我正在研究教程中的一个练习,我有一个简单的列表,它应该显示我从网站获得的数据。尽管我的适配器正确填充,但我的列表视图仍为空。我尝试打印适配器对象,它工作正常。请帮忙。提前谢谢。

MainAcitvity.java

    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;

    import java.net.URL;
    import java.util.ArrayList;
    import java.util.concurrent.ExecutionException;

    public class MainActivity extends AppCompatActivity {

        private static String USGS_URL = "https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2014-01-01&endtime=2014-12-01&minmagnitude=7";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    DownloadTask task = new DownloadTask();

            ArrayList<String> place = new ArrayList<>();
            try {
                place = task.execute(USGS_URL).get();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
            ArrayAdapter<String> placesAdapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,place);

            ListView listView = (ListView)findViewById(R.id.listView);
            listView.setAdapter(placesAdapter);

        }

             private class DownloadTask extends AsyncTask<String, Void, ArrayList<String>>
             {


                 @Override
                 protected ArrayList<String> doInBackground(String... strings) {

                    ArrayList<String > place = QueryUtils.fetchData(strings[0]);

                     }return place;
                 }


             }

        }

QueryUtils.java

import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

import javax.net.ssl.HttpsURLConnection;



public final class QueryUtils {

    private QueryUtils() {


    }

    protected static ArrayList<String> fetchData(String rawStream) {
        URL newUrl = null;
        try {
            newUrl = createUrl(rawStream);
            Log.i("QueryUtils.java", newUrl.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        ArrayList<String> values = QueryUtils.makeHttpRequest(newUrl);


        }return values;
    }

    private static URL createUrl(String rawStream) throws MalformedURLException {

        URL url = new URL(rawStream);
        return url;
    }

    public static ArrayList<String> makeHttpRequest(URL newUrl) {

        HttpsURLConnection url = null;
        InputStream in = null;
        ArrayList<String> values = new ArrayList<>();
        try {
            url = (HttpsURLConnection) newUrl.openConnection();
            in = url.getInputStream();
            String data = fetchJsonData(in);
             values = fetchOutput(data);

        } }catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            if(url !=null)
            url.disconnect();
        }
        return values;
    }

    private static ArrayList<String> fetchOutput(String data) {
        String place = null;
        ArrayList<String> values = new ArrayList<>();
        try {
            JSONObject baseJsonObject = new JSONObject(data);
            JSONArray featuresAray =baseJsonObject.getJSONArray("features");
            for(int i=0;i<featuresAray.length();i++) {

                JSONObject firstArray = featuresAray.getJSONObject(i);
                JSONObject properties = firstArray.getJSONObject("properties");
                place = properties.getString("place");

                values.add(place);
            }




        } catch (JSONException e) {
            e.printStackTrace();
        }
        return values;


    }

    private static String  fetchJsonData(InputStream in) throws IOException {

        StringBuilder output = new StringBuilder();
        InputStreamReader inReader = new InputStreamReader(in);
        BufferedReader reader = new BufferedReader(inReader);
        String line = reader.readLine();
        while (line != null) {

            output.append(line);
            line = reader.readLine();
        }

        return output.toString();
    }
}

1 个答案:

答案 0 :(得分:0)

所以解决方案真的很愚蠢。我不敢相信我浪费了这么多时间。显然文本是白色的,这就是为什么我的listView看起来是空的:( :(