Java ListView在JSON下载后不更新

Java ListView在JSON下载后不更新,java,android,Java,Android,我正在尝试创建一个简单的android应用程序,从JSON中获取数据,并将其添加到ListView中的自定义行中 我确实从JSON获取了数据,但没有一行显示出来。我发现这是因为行是在JSON完成下载之前“创建”的。下载JSON后如何更新ListView public class MainActivity extends AppCompatActivity { private RequestQueue mQueue; private static final String TAG

我正在尝试创建一个简单的android应用程序,从JSON中获取数据,并将其添加到ListView中的自定义行中

我确实从JSON获取了数据,但没有一行显示出来。我发现这是因为行是在JSON完成下载之前“创建”的。下载JSON后如何更新ListView

public class MainActivity extends AppCompatActivity {

    private RequestQueue mQueue;
    private static final String TAG = "MainActivity";
    String isDoneLoading = "false";

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

        Log.d(TAG, "LOG STARTED");
        mQueue = Volley.newRequestQueue(this);

        ListView listView = (ListView) findViewById(R.id.listView);
        ArrayList<News> newsList = new ArrayList<>();

        // Create news objects

        jsonParse(newsList);

        NewsListAdapter adapter = new NewsListAdapter(this, R.layout.row, newsList);

        listView.setAdapter(adapter);

        Log.d(TAG, "RELOADING LISTVIEW");

    }


    private void jsonParse(final ArrayList<News> newsArray) {

        String url = "https://api.myjson.com/bins/kp9wz";

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("employees");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject news_feed = jsonArray.getJSONObject(i);

                                String headline = news_feed.getString("firstname");
                                String category = news_feed.getString("mail");

                                Log.i(TAG, headline);

                                News newsData = new News(headline, category);

                                newsArray.add(newsData);
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mQueue.add(request);
    }
}
public类MainActivity扩展了AppCompatActivity{
专用请求队列MQUE;
私有静态最终字符串TAG=“MainActivity”;
字符串isDoneLoading=“false”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(标记“日志已启动”);
mQueue=Volley.newRequestQueue(this);
ListView ListView=(ListView)findViewById(R.id.ListView);
ArrayList newsList=新建ArrayList();
//创建新闻对象
jsonParse(新闻列表);
NewsListAdapter=新的NewsListAdapter(this,R.layout.row,newsList);
setAdapter(适配器);
Log.d(标记“重新加载列表视图”);
}
私有void jsonParse(最终ArrayList newsArray){
字符串url=”https://api.myjson.com/bins/kp9wz";
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“员工”);
for(int i=0;i
尝试此更改

private RequestQueue mQueue;
private static final String TAG = "MainActivity";
String isDoneLoading = "false";
private NewsListAdapter adapter;

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

    Log.d(TAG, "LOG STARTED");
    mQueue = Volley.newRequestQueue(this);

    ListView listView = (ListView) findViewById(R.id.listView);
    ArrayList<News> newsList = new ArrayList<>();


    // Create news objects


    jsonParse(newsList);



     adapter = new NewsListAdapter(this, R.layout.row, newsList);

    listView.setAdapter(adapter);

    Log.d(TAG, "RELOADING LISTVIEW");


}


private void jsonParse(final ArrayList<News> newsArray) {

    String url = "https://api.myjson.com/bins/kp9wz";

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray jsonArray = response.getJSONArray("employees");


                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject news_feed = jsonArray.getJSONObject(i);

                            String headline = news_feed.getString("firstname");
                            String category = news_feed.getString("mail");

                            Log.i(TAG, headline);

                            News newsData = new News(headline, category);

                            newsArray.add(newsData);
                        }

                        updateList();

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    mQueue.add(request);

}

private void updateList(){
    if(adapter != null){
        adapter.notifyDataSetChanged();
    }
}
私有请求队列MQUE;
私有静态最终字符串TAG=“MainActivity”;
字符串isDoneLoading=“false”;
私有新闻列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(标记“日志已启动”);
mQueue=Volley.newRequestQueue(this);
ListView ListView=(ListView)findViewById(R.id.ListView);
ArrayList newsList=新建ArrayList();
//创建新闻对象
jsonParse(新闻列表);
adapter=新的NewsListAdapter(this,R.layout.row,newsList);
setAdapter(适配器);
Log.d(标记“重新加载列表视图”);
}
私有void jsonParse(最终ArrayList newsArray){
字符串url=”https://api.myjson.com/bins/kp9wz";
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“员工”);
for(int i=0;i
尝试此更改

private RequestQueue mQueue;
private static final String TAG = "MainActivity";
String isDoneLoading = "false";
private NewsListAdapter adapter;

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

    Log.d(TAG, "LOG STARTED");
    mQueue = Volley.newRequestQueue(this);

    ListView listView = (ListView) findViewById(R.id.listView);
    ArrayList<News> newsList = new ArrayList<>();


    // Create news objects


    jsonParse(newsList);



     adapter = new NewsListAdapter(this, R.layout.row, newsList);

    listView.setAdapter(adapter);

    Log.d(TAG, "RELOADING LISTVIEW");


}


private void jsonParse(final ArrayList<News> newsArray) {

    String url = "https://api.myjson.com/bins/kp9wz";

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray jsonArray = response.getJSONArray("employees");


                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject news_feed = jsonArray.getJSONObject(i);

                            String headline = news_feed.getString("firstname");
                            String category = news_feed.getString("mail");

                            Log.i(TAG, headline);

                            News newsData = new News(headline, category);

                            newsArray.add(newsData);
                        }

                        updateList();

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    mQueue.add(request);

}

private void updateList(){
    if(adapter != null){
        adapter.notifyDataSetChanged();
    }
}
私有请求队列MQUE;
私有静态最终字符串TAG=“MainActivity”;
字符串isDoneLoading=“false”;
私有新闻列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(标记“日志已启动”);
mQueue=Volley.newRequestQueue(this);
ListView ListView=(ListView)findViewById(R.id.ListView);
ArrayList newsList=新建ArrayList();
//创建新闻对象
jsonParse(新闻列表);
adapter=新的NewsListAdapter(this,R.layout.row,newsList);
setAdapter(适配器);
Log.d(标记“重新加载列表视图”);
}
私有void jsonParse(最终ArrayList newsArray){
字符串url=”https://api.myjson.com/bins/kp9wz";
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“员工”);
for(int i=0;itry {
    JSONArray jsonArray = response.getJSONArray("employees");
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject news_feed = jsonArray.getJSONObject(i);
        String headline = news_feed.getString("firstname");
        String category = news_feed.getString("mail");
        Log.i(TAG, headline);
        News newsData = new News(headline, category);

        newsArray.add(newsData);
        }
        // Notify the adapter after the for loop
        adapter.notifyDataSetChanged()

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