空指针异常无法解决?

时间:2018-03-29 20:16:14

标签: android android-fragments

从OpensubcontentActivity中的oncreate调用我的异步任务类,它正在执行正常但在onBindViewHolder中从vivcontentAdapter调用相同的异步任务类时,它在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

在这个活动中,我正在调用opensubcontentactivity的异步任务类。但是从这里进行调用时,它在asynctask类中给出错误getData()

使用 -

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

错误 -

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)

1 个答案:

答案 0 :(得分:0)

要在Recycler视图中执行点击,您需要更改适配器。添加一个接口作为点击监听器并在您的活动中实现它,如下所示:

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

现在,在您的活动中,您可以捕获cliicks并运行异步任务:

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

           }
       }

   }