动态创建的数据未插入全局范围 Arraylist 数据变量

Dynamic created data not inserted global scope Arraylist data variable

我正在尝试从 Internet 获取数据,这些数据将填充到列表视图中。我有一个名为 NoticeAdapter 的功能齐全的自定义适配器。 Arraylist 未附加动态创建的对象。

我的错误是什么?我已经花了 8 个小时才找到 problem.But 找不到。未显示错误但未创建列表视图。如果我做一个简单的一两个对象 在 onCreate 方法中,然后将其添加到列表中。它工作正常。

请任何人帮助我。 提前致谢

ListView noticeList;
NoticeAdapter na;
public String title, file_link, dept, pubDate;

这里我清除data全局变量

public ArrayList<NoticeModel> data = new ArrayList<>();
String serverUrl = "http://192.168.0.104/virtualclassroomapi/notice.php";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_notice_board);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



    noticeList = (ListView) findViewById(R.id.noticelist);

这里我调用从网上获取数据并保存为数据中的对象

    getDataFromServer();

如果我在这里调用"getData();"那么它就会工作

    na = new NoticeAdapter(data, getApplicationContext());
    noticeList.setAdapter(na);

}



public void getDataFromServer(){



    StringRequest request = new StringRequest(Request.Method.POST, serverUrl, new Response.Listener<String>() {


        @Override
        public void onResponse(String response) {

            try {
                JSONArray jsonArray = new JSONArray(response);

                for (int i =0; i<jsonArray.length();i++)
                {
                    try {

                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        title = jsonObject.getString("title");
                        file_link = jsonObject.getString("file_link");
                        dept = jsonObject.getString("dept");
                        pubDate = jsonObject.getString("publish_date");

我使用 Toast 测试来自服务器的响应。但不作为新对象附加到数据(Arraylist)全局变量

                        data.add(new NoticeModel(title,file_link,dept,pubDate));





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

                }


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


        }


    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(NoticeBoard.this,"Response Error",Toast.LENGTH_LONG).show();
        }
    });

    MySingleton.getInstance(NoticeBoard.this).addToRequestQueue(request);


}

数据从这里插入但不是从那里插入,如果我调用它而不是 getDataFromServer()

public void getData(){



    String title = "title from varable";
    data.add(new NoticeModel(title,"something", "get","sthe"));

}

将数据添加到您的适配器后,您应该告诉适配器已更改,因此调用 na.notifyDataSetChanged();

首先你必须在其中添加项目:

JSONArray jsonArray = new JSONArray(response);

for (int i =0; i<jsonArray.length();i++) 
{
NoticeModel item = new NoticeModel();
JSONObject jsonObject = jsonArray.getJSONObject(i);
item.setTitle(jsonObject.getString("title"));
item.setFileLink(jsonObject.getString("file_link"));
item.setDept(jsonObject.getString("dept"));
item.setPublishDate(jsonObject.getString("publish_date"));
data.add(item);
}

然后在 for 循环之后设置适配器:

na = new NoticeAdapter(data, getApplicationContext());
noticeList.setAdapter(na);

并在您的适配器中提及:

na.notifyDataSetChanged();