Перечень повторных просмотров не отображается в android - PullRequest
2 голосов
/ 03 февраля 2020

Привет в приведенном ниже значении кода: я добавляю значения в account_name, после чего с помощью этого адаптера выполняется установка адаптера. Сервер отправляет ответы, но значения не добавляются в список, и список также отображается.

Для отображения использовался возвратник для отображения значений.

Может кто-нибудь мне помочь, где сделал ошибку

Ошибка:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup, boolean)' on a null object reference
        at com.genworks.oppm.Adapter.MyAdapter.onCreateViewHolder(MyAdapter.java:32)
        at com.genworks.oppm.Adapter.MyAdapter.onCreateViewHolder(MyAdapter.java:19)

Обновлен код:

Активность. java:

for(SyncBlocks syncBlocks1:syncBlocks){

                        String label=syncBlocks1.getLabel();

                        ArrayList<SynFields> synFields=syncBlocks1.getFields();

                        ArrayList<SynFields> jsonArray=syncBlocks1.getFields();

                        for(SynFields synFields1:synFields){

                            String name=synFields1.getName();

                            Object values = synFields1.getValue().toString();

                            try {

                                if (values instanceof JSONObject) {
                                    JSONObject jsonObject1 = new
                                            JSONObject(String.valueOf(synFields1.getValue()));
                                    String value=jsonObject1.getString("value");
                                }else if (values instanceof String) {
                                    //here, you get string

                                     String value =  synFields1.getValue().toString();
                                    //account_name.addAll(value);
                                    String value_names= String.valueOf(synFields1.getValue());
                                   // Log.e("account_name", String.valueOf(account_name.add(value)));
                                    account_name.add(value_names);

                                    //account_name.add(value);

                                }

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

                        }

                        myAdapter = new MyAdapter(getContext(),account_name);
                        recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
                        recyclerView.setAdapter(myAdapter);

                    }

MyAdapter. java:

   public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private LayoutInflater inflater;
    private Context mContext;
    private ArrayList<String> mSynFields=new ArrayList<>();

    public MyAdapter(Context context, ArrayList<String> synFieldsArrayList) {
        mContext=context;
        mSynFields=synFieldsArrayList;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = inflater.inflate(R.layout.fragment_account, parent, false);
        MyViewHolder holder = new MyViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

       holder.name.setText(mSynFields.get(position));


    }

    @Override
    public int getItemCount() {

        return mSynFields.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        TextView country, name, city;
        ImageView iv;

        public MyViewHolder(View itemView) {
            super(itemView);

            country = (TextView) itemView.findViewById(R.id.headingText);
            name = (TextView) itemView.findViewById(R.id.subHeaderText);
            city = (TextView) itemView.findViewById(R.id.subHeadingText);
        }

    }
}

Ответы [ 3 ]

2 голосов
/ 03 февраля 2020

Вы получаете эту ошибку, потому что вы вызываете метод inflate из ссылки null (inflater).

Вы должны инициализировать inflater, как показано ниже.

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        inflater = LayoutInflater.from(parent.getContext()); // add this line.

        //or you can do like below
        // View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_account, parent, false);

        View view = inflater.inflate(R.layout.fragment_account, parent, false);

        MyViewHolder holder = new MyViewHolder(view);

        return holder;
    }
0 голосов
/ 03 февраля 2020

измените свой код на

ArrayList<SynFields> account_name=new ArrayList();

String label=syncBlocks1.getLabel();

ArrayList<SynFields> synFields=syncBlocks1.getFields();

ArrayList<SynFields> jsonArray=syncBlocks1.getFields();

for(SynFields synFields1:synFields){

String name=synFields1.getName();

   Object values = synFields1.getValue();

      try {

          if (values instanceof JSONObject) {
            JSONObject jsonObject1 = new 
                 JSONObject(String.valueOf(synFields1.getValue()));
          }else if (values instanceof String) {
            //here, you get string
            String value = String.valueOf(synFields1.getValue());
            account_name.add(value);

        }

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

}

myAdapter = new MyAdapter(getContext(),account_name);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));    
recyclerView.setAdapter(myAdapter);
0 голосов
/ 03 февраля 2020

Поместите строки ниже за for l oop со всем списком в качестве параметра для адаптера, встроенного в l oop:

myAdapter = new MyAdapter(getContext(),account_name));
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));

В дополнение к выше, вы передаете account_name типа ArrayList<String>, тогда как в вашем адаптере ваш конструктор ожидает synFieldsArrayList типа ArrayList<SynFields>. Оба должны быть одного типа. Либо поменяйте адаптер или свою деятельность, чтобы убедиться, что оба они одного типа. В вашем конструкторе MyViewHolder добавьте:

Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.fragment_account, parent, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...