Невозможно проанализировать данные XML в RecyclerView - PullRequest
0 голосов
/ 14 мая 2019

У меня есть RecyclerView, который должен получать данные из файла XML.Я создал метод, который получает входной файл из переменной, содержащей содержимое XML, затем циклически обрабатывает эти данные и добавляет XML (дочерние узлы) в список (например, ArrayList nameoftheList).список используется в отображаемом методе onBind.

Моя проблема в том, что приложение, запускающее программу утилизации, ничего не показывает!ниже некоторого кода:

Редактировать: внесены предлагаемые изменения


Адаптер (Редактировать)

public class Adapter_recycler extends   
RecyclerView.Adapter<RecyclerView.ViewHolder> 
{


private String lista;
private ArrayList<Node> listaNodi;
private ArrayList<String> lista_errore;

public Adapter_recycler(String lista,RecyclerView recyclerView) {
    this.lista = lista;
    listaNodi = new ArrayList<>();


    lista_errore = new ArrayList<>();
    for (int i=0;i<=5;i++)
    lista_errore.add("ERRORE");

    try {
        LeggiFile();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    }

}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v;
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.righe_main,parent,false);
            return new ViewHolder1(v);
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {


    if(listaNodi.size() == 0)
    {
        ((ViewHolder1)viewHolder).titolo1.setText(lista_errore.get(position));
    }else{
        ((ViewHolder1)viewHolder).titolo1.setText(((Element) listaNodi.get(position)).getAttribute("name"));
    }

}

@Override
public int getItemCount() {
   if (listaNodi.size() == 0)
    return lista_errore.size();
   else
       return  listaNodi.size();
}

Метод XML (циклично и добавлять в список)(Правка)

private void LeggiFile() throws ParserConfigurationException, IOException, SAXException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder DBuilder = factory.newDocumentBuilder();

    Node Players = DBuilder.parse(new InputSource(new StringReader(lista)));
    Node player = null;

    for (int i = 0; i < Players.getChildNodes().getLength(); i++) {
        if (player == null) {
            player = Players.getFirstChild();
        }
        else
            {player  = player.getNextSibling() ;}
        listaNodi.add(player);
    }

}

Фрагмент (Правка)

public class Fragment_Chat extends Fragment {

private Adapter_recycler adapter;
private RecyclerView recyclerView;
private LinearLayoutManager linearLayoutManager;
private String list = "";
Context context = getActivity();


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_fragment__chat, container,  
false);


    list = ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
            "<Players>\n" +
            "<player name=\"mike\">\n" +
            "</player>\n" +
            "<player name=\"mike\">\n" +
            "</player>\n" +
            "<player name=\"mike\">\n" +
            "</player>\n" +
            "</Players>");


    recyclerView = view.findViewById(R.id.recycler);
    linearLayoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(linearLayoutManager);
    adapter = new Adapter_recycler(list,recyclerView,context);

    recyclerView.setAdapter(adapter);


    return view;

}

}

1 Ответ

1 голос
/ 14 мая 2019

То, что я сразу вижу, это изменение

@Override
public int getItemCount() {
   return 0;
}

до

@Override
public int getItemCount() {
   return listaNodi.size();
}

Конструктор Adapter_recycler не создает экземпляр поля listaNodi.

Если это не помогло, вы можете установить точку останова в onBindViewHolder и убедиться, что listaNodi содержит элементы.

Move

    try {
            LeggiFile();
..
..

до Adapter_recycler Конструктор, иначе он будет запускаться каждый раз, когда требуется представление

DBuilder.parse может занять String, без необходимости File

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...