动态创建的数据未插入全局作用域Arraylist数据变量

时间:2018-09-26 07:04:14

标签: android arraylist datamodel

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

我的错是什么?我已经花了8个小时才找到问题。但是没有找到。没有显示错误,但没有创建列表视图。如果我做一个简单的一两个对象 在onCreate方法中,然后将其添加到list中。效果很好。

请任何人帮助我。 预先感谢

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

在这里我清除数据全局变量

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);

我在这里打电话来从Internet获取数据并将其另存为数据中的对象

    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测试了服务器的响应。但不能作为新对象附加到data(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"));

}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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();