1

Calling my async task class from my oncreate in OpensubcontentActivity, it is executing fine but while calling the same async task class from vivcontentAdapter in onBindViewHolder it is giving null pointer error in progressdialog.

OpensubcontentActivity

public class OpenSubContentActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private vivcontentAdapter vivcontentAdapteradapter;
    static String stack_info[] = new String[10];
    static int top = -1;
    static String ObjectId;
    static List<Information> data_content = new ArrayList<>();
    public static Map info_map = null;
    Boolean file_flag;
    File file;
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_open_sub_content);
        setEveryThing();
        Intent mIntent = getIntent();
        context = this;
        ObjectId = mIntent.getStringExtra("CabinetID");
        new getData().execute();
    }

    public void setEveryThing() {
        floatingActionMenu = (FloatingActionMenu) findViewById(R.id.floating_menu);
        newfolder = (FloatingActionButton) findViewById(R.id.idtem__folder);
        newdoc = (FloatingActionButton) findViewById(R.id.idtem_doc);
        upload = (FloatingActionButton) findViewById(R.id.idtem_upload);
        capture = (FloatingActionButton) findViewById(R.id.idtem_photo);
        toolbar = (Toolbar) findViewById(R.id.toolBar);
        toolbar.setTitleTextColor(0xFFFFFFFF);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(("Example"));
        recyclerView = (RecyclerView) findViewById(R.id.list_file);
        vivcontentAdapteradapter = new vivcontentAdapter(this, data_content);
        recyclerView.setAdapter(vivcontentAdapteradapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
    }

    class getData extends AsyncTask<Void, Void, String> {
        ProgressDialog pDialog;

        @Override
        protected void onPreExecute() {            
            pDialog = new ProgressDialog(OpenSubContentActivity.this);
            pDialog.setMessage("Fetching Content...");
            pDialog.show();
            pDialog.setCanceledOnTouchOutside(false);
        }

        @Override
        protected String doInBackground(Void... voids) {
            info_map = new HashMap();
            String title = "";
            String results = "";
            int count = 0;
            if (ObjectId.startsWith("0c")) {
                Log.d("first", "coming");
                CmisObject object = MainActivity.session.getObject(MainActivity.session.createObjectId(ObjectId));
                Folder folder = (Folder) object;
                //Document document = (Document)object;
                OperationContext operationContext = MainActivity.session.createOperationContext();
                ItemIterable<CmisObject> childrenn = folder.getChildren(operationContext);
                ItemIterable<CmisObject> page = childrenn.getPage();
                Iterator<CmisObject> pageItems = page.iterator();
                while (pageItems.hasNext()) {
                    CmisObject item = null;
                    item = pageItems.next();
                    //System.out.println(item.getId());
                    if (item != null && item.getName() != null) {
                        if (item.getId().startsWith("0b")) {
                            Information info = new Information();
                            info.title = item.getName();
                            info.iconId = icons[0];
                            info.folderId_open_Id = item.getId();
                            title = title + "\n" + item.getName();

                            info_map.put(count, info.folderId_open_Id);
                            data_content.add(info);
                            count++;
                        } 
                        return results;
                    }

                    @Override
                    protected void onPostExecute(String s) {
                        pDialog.dismiss();
                        vivcontentAdapteradapter.notifyDataSetChanged();

                    }
                } 
            }
        }
    }
}

vivcontentAdapter

In this activity i am calling async task class of opensubcontentactivity.But while calling from here in progress dialog it is giving error in asynctask class getData()

Using -

OpenSubContentActivity openSubContentActivity=new OpenSubContentActivity();
openSubContentActivity.new getData().execute();

vivcontentAdapter

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

    private final LayoutInflater inflater;
    List<Information> data_content = Collections.emptyList();
    Context context;

    public vivcontentAdapter(Context context, List<Information> data) {
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.data_content = data;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.customrow, parent, false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(final vivcontentAdapter.MyViewHolder holder, final int position) {
        Information current = data_content.get(position);
        holder.title.setText(current.title);
        holder.icon.setImageResource(current.iconId);
        holder.keyicon.setImageResource(current.checkin_icon);
        holder.title.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String store_objectID = (String) OpenSubContentActivity.info_map.get(position);
                if (store_objectID.startsWith("0b")) {
                    OpenSubContentActivity.top++;
                    OpenSubContentActivity.stack_info[OpenSubContentActivity.top] = store_objectID; OpenSubContentActivity.ObjectId = store_objectID;
                    OpenSubContentActivity openSubContentActivity=new OpenSubContentActivity();
                    openSubContentActivity.new getData().execute();

                } else {
                    OpenSubContentActivity.ObjectId = store_objectID;
                    OpenSubContentActivity openSubContentActivity=new OpenSubContentActivity();
                    openSubContentActivity.new getData().execute();
                }
                Toast.makeText(context, "Open", Toast.LENGTH_SHORT).show();

            }
        });

        holder.txtOptionDigit.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("RestrictedApi")
            @Override
            public void onClick(View v) {
                //Display option menu

            });
        }

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

        class MyViewHolder extends RecyclerView.ViewHolder {
            TextView title, txtOptionDigit;
            ImageView icon, keyicon;

            public MyViewHolder(View itemView) {
                super(itemView);
                title = (TextView) itemView.findViewById(R.id.textvw);
                icon = (ImageView) itemView.findViewById(R.id.imageView);
                keyicon = (ImageView) itemView.findViewById(R.id.key_icon);
                txtOptionDigit = (TextView) itemView.findViewById(R.id.txtOptionDigit);
            }
        }
    }
}

Error-

03-30 00:21:40.690 10385-10385/reva.irving E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-30 00:21:40.690 10385-10385/reva.irving E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-30 00:22:04.228 10385-10385/reva.irving E/AndroidRuntime: FATAL EXCEPTION: main
        Process: reva.irving, PID: 10385
        java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ProgressDialog.setMessage(java.lang.CharSequence)' on a null object reference
        at reva.irving.OpenSubContentActivity$getData.onPreExecute(OpenSubContentActivity.java:103)
        at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:620)
        at android.os.AsyncTask.execute(AsyncTask.java:567)
        at reva.irving.OpenSubContentActivity.call(OpenSubContentActivity.java:84)
        at reva.irving.vivcontentAdapter$1.onClick(vivcontentAdapter.java:59)
        at android.view.View.performClick(View.java:5647)
        at android.view.View$PerformClick.run(View.java:22462)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6205)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
udit7395
  • 626
  • 5
  • 16
Ashish yadav
  • 97
  • 1
  • 11

1 Answers1

0

To perform clicks in a Recycler view you need to change your adapter. Add an interface to act as the click listener and implement it in your activity, like so:

 public class vivcontentAdapter extends RecyclerView.Adapter<vivcontentAdapter.MyViewHolder> {
        private final LayoutInflater inflater;

        List<Information> data_content = Collections.emptyList();
        Context context;
          private OnClickItem clickListener;



        public vivcontentAdapter(Context context, List<Information> data) {
            this.context = context;
            inflater = LayoutInflater.from(context);
            this.data_content = data;
        }

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = inflater.inflate(R.layout.customrow, parent, false);
            MyViewHolder holder = new MyViewHolder(view);
            return holder;
        }

        @Override
        public void onBindViewHolder(final vivcontentAdapter.MyViewHolder holder, final int position) {
            Information current = data_content.get(position);
            holder.title.setText(current.title);
            holder.icon.setImageResource(current.iconId);
            holder.keyicon.setImageResource(current.checkin_icon);
            holder.txtOptionDigit.setOnClickListener(new View.OnClickListener() {
                @SuppressLint("RestrictedApi")
                @Override
                public void onClick(View v) {
                    //Display option menu

            });
        }

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

       public void setClickListener(OnClickItem listener){
           this.listener = listener;
       }

        class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
            TextView title, txtOptionDigit;
            ImageView icon, keyicon;

            public MyViewHolder(View itemView) {
                super(itemView);
                title = (TextView) itemView.findViewById(R.id.textvw);
                icon = (ImageView) itemView.findViewById(R.id.imageView);
                keyicon = (ImageView) itemView.findViewById(R.id.key_icon);
                txtOptionDigit = (TextView) itemView.findViewById(R.id.txtOptionDigit);
               itemView.setOnClickListener(this);
            }
            @Override
            public void onClick(View v) {
                   int pos = getAdapterPosition();
                   listener.onClickListItem(pos);
            }
        }

     public interface OnClickItem{
          void onClickListItem(int position);
     }
    }

Now in your activity you can catch the cliicks and run the async task:

public class OpenSubContentActivity extends AppCompatActivity implements vivcontentAdapter.OnClickItem{


       private RecyclerView recyclerView;
       private vivcontentAdapter vivcontentAdapteradapter;
       static String stack_info[] = new String[10];
       static int top = -1;
      static String ObjectId;
       static List<Information> data_content = new ArrayList<>();
       public static Map info_map = null;
       Boolean file_flag;
       File file;
   Context context;
       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_open_sub_content);
           setEveryThing();
           Intent mIntent = getIntent();
            context=this;
           ObjectId = mIntent.getStringExtra("CabinetID");
           new getData().execute();
       }

       public void setEveryThing() {
           floatingActionMenu = (FloatingActionMenu) findViewById(R.id.floating_menu);
           newfolder = (FloatingActionButton) findViewById(R.id.idtem__folder);
           newdoc = (FloatingActionButton) findViewById(R.id.idtem_doc);
           upload = (FloatingActionButton) findViewById(R.id.idtem_upload);
           capture = (FloatingActionButton) findViewById(R.id.idtem_photo);
           toolbar = (Toolbar) findViewById(R.id.toolBar);
           toolbar.setTitleTextColor(0xFFFFFFFF);
           setSupportActionBar(toolbar);
           getSupportActionBar().setTitle(("Example"));
           recyclerView = (RecyclerView) findViewById(R.id.list_file);
           vivcontentAdapteradapter = new vivcontentAdapter(this, data_content);
           vivcontentAdapteradapter.setClickListener(this);
           recyclerView.setAdapter(vivcontentAdapteradapter);
           recyclerView.setLayoutManager(new LinearLayoutManager(this));
       }


       @Override
       public  void onClickListItem(int position){
           new getData().execute();
       }


       class getData extends AsyncTask<Void, Void, String> {
           ProgressDialog pDialog;

           @Override
           protected void onPreExecute() {

               pDialog = new ProgressDialog(OpenSubContentActivity.this);
               pDialog.setMessage("Fetching Content...");
               pDialog.show();
               pDialog.setCanceledOnTouchOutside(false);
           }


           @Override
           protected String doInBackground(Void... voids) {
               info_map = new HashMap();
               String title = "";
               String results = "";
               int count = 0;
               if (ObjectId.startsWith("0c")) {
                   Log.d("first", "coming");
                   CmisObject object = MainActivity.session.getObject(MainActivity.session.createObjectId(ObjectId));
                   Folder folder = (Folder) object;
                   //Document document = (Document)object;
                   OperationContext operationContext = MainActivity.session.createOperationContext();
                   ItemIterable<CmisObject> childrenn = folder.getChildren(operationContext);
                   ItemIterable<CmisObject> page = childrenn.getPage();
                   Iterator<CmisObject> pageItems = page.iterator();
                   while (pageItems.hasNext()) {
                       CmisObject item = null;
                       item = pageItems.next();
                       //System.out.println(item.getId());
                       if (item != null && item.getName() != null) {
                           if (item.getId().startsWith("0b")) {
                               Information info = new Information();
                               info.title = item.getName();
                               info.iconId = icons[0];
                               info.folderId_open_Id = item.getId();
                               title = title + "\n" + item.getName();

                               info_map.put(count, info.folderId_open_Id);
                               data_content.add(info);
                               count++;
                           } 
               return results;
           }

           @Override
           protected void onPostExecute(String s) {
               pDialog.dismiss();
               vivcontentAdapteradapter.notifyDataSetChanged();

           }
       }

   }
Levi Moreira
  • 11,917
  • 4
  • 32
  • 46