Динамически созданные данные не вставлены в глобальную область Переменная данных Arraylist - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь получить данные из интернета, и они будут заполнены в виде списка.У меня есть полнофункциональный пользовательский адаптер с именем NoticeAdapter.Arraylist не дополняется динамически созданным объектом.

В чем моя ошибка?У меня уже ушло 8 часов, чтобы найти проблему. Но не найти.Ошибка не отображается, но не создается представление списка.Если я сделаю простой один или два объекта в методе onCreate, он будет добавлен в список.это работает нормально.

Пожалуйста, помогите мне. Заранее спасибо

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

Здесь я Decleare данных глобальная переменная

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.но не добавлять в глобальную переменную 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 голосов
/ 26 сентября 2018

Сначала вы должны добавить в него элемент:

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

, затем установить адаптер после цикла:

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

и упомянуть в своем адаптере:

na.notifyDataSetChanged();
0 голосов
/ 26 сентября 2018

после добавления данных в ваш адаптер вы должны сказать, что адаптер был изменен, поэтому позвоните na.notifyDataSetChanged();

...