Attempt to invoke virtual method 'void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatePdfFile(java.util.ArrayList)' on a null object reference

huangapple go评论106阅读模式
英文:

Attempt to invoke virtual method 'void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatePdfFile(java.util.ArrayList)' on a null object reference

问题

在我在searchView中输入文本以搜索项目时,我的应用程序崩溃了。我有一个片段和一个适配器。接下来我该怎么做?有人能帮帮我。

这是我收到的错误信息-
尝试调用空对象引用上的'void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatePdfFile(java.util.ArrayList)'方法

以下是片段的代码

  1. public class Pdf_Reader_fragments extends Fragment implements SearchView.OnQueryTextListener {
  2. // ... 其他代码 ...
  3. @Override
  4. public boolean onQueryTextChange(String newText) {
  5. String userInput = newText.toLowerCase();
  6. ArrayList<File> myfile = new ArrayList<>();
  7. for (File pdf : pdffiles){
  8. if (pdf.getName().toLowerCase().contains(userInput)){
  9. myfile.add(pdf);
  10. }
  11. }
  12. adapter.updatePdfFile(myfile);
  13. return true;
  14. }
  15. }

pdfAdapter 类

  1. public class pdfAdapter extends RecyclerView.Adapter<pdfAdapter.MyViewHolder> {
  2. // ... 其他代码 ...
  3. void updatePdfFile(ArrayList<File> fileArrayList){
  4. files.clear();
  5. files.addAll(fileArrayList);
  6. notifyDataSetChanged();
  7. }
  8. }

希望这些内容对您有所帮助。如果您需要更多帮助,请随时问我。

英文:

When I am typing text in searchView for search items, my app getting crashed. I have a fragment and adapter. What I do next? Someone help me.

This is the error I got-
Attempt to invoke virtual method 'void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatePdfFile(java.util.ArrayList)' on a null object reference

here is fragment code

  1. public class Pdf_Reader_fragments extends Fragment implements SearchView.OnQueryTextListener {
  2. public static ArrayList&lt;File&gt; pdffiles = new ArrayList&lt;&gt;();
  3. RecyclerView recyclerView;
  4. File folder;
  5. String[] items;
  6. static pdfAdapter adapter;
  7. int number = 0;
  8. private SwipeRefreshLayout mSwipeRefreshLayout;
  9. public Pdf_Reader_fragments() {
  10. }
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  13. Bundle savedInstanceState) {
  14. View view = inflater.inflate(R.layout.fragment_pdf__reader, container, false);
  15. recyclerView = (RecyclerView) view.findViewById(R.id.recylerView);
  16. mSwipeRefreshLayout = view.findViewById(R.id.swip);
  17. setHasOptionsMenu(true);
  18. mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  19. @Override
  20. public void onRefresh() {
  21. try {
  22. intiViews();
  23. } catch (Exception e) {
  24. }
  25. Toast.makeText(getContext(), &quot;Page Refresh&quot;, Toast.LENGTH_SHORT).show();
  26. mSwipeRefreshLayout.setRefreshing(false);
  27. }
  28. });
  29. intiViews();
  30. return view;
  31. }
  32. private void intiViews() {
  33. folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
  34. pdffiles = getPdfFiles(folder);
  35. ArrayList&lt;File&gt; mypdf = getPdfFiles(Environment.getExternalStorageDirectory());
  36. items = new String[mypdf.size()];
  37. for (int i = 0; i &lt; items.length; i++) {
  38. items[i] = mypdf.get(i).getName().replace(&quot;.pdf&quot;, &quot;&quot;);
  39. }
  40. pdfAdapter adapter = new pdfAdapter(getContext(), pdffiles, items);
  41. recyclerView.setAdapter(adapter);
  42. recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), RecyclerView.VERTICAL, false));
  43. }
  44. private ArrayList&lt;File&gt; getPdfFiles(File folder) {
  45. ArrayList&lt;File&gt; arrayList = new ArrayList&lt;&gt;();
  46. File[] file = folder.listFiles();
  47. if (file != null) {
  48. for (File singleFile : file) {
  49. if (singleFile.isDirectory() &amp;&amp; !singleFile.isHidden()) {
  50. arrayList.addAll(getPdfFiles(singleFile));
  51. } else {
  52. if (singleFile.getName().endsWith(&quot;.pdf&quot;)) {
  53. arrayList.add(singleFile);
  54. }
  55. }
  56. }
  57. }
  58. return arrayList;
  59. }
  60. @Override
  61. public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
  62. super.onCreateOptionsMenu(menu, inflater);
  63. menu.clear();
  64. inflater.inflate(R.menu.search, menu);
  65. MenuItem item = menu.findItem(R.id.search_button);
  66. item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM);
  67. SearchView searchView = (SearchView) item.getActionView();
  68. searchView.setOnQueryTextListener(this);
  69. }
  70. @Override
  71. public boolean onQueryTextSubmit(String query) {
  72. if (adapter != null) {
  73. query = String.valueOf(query.equals(&quot;&quot;));
  74. }
  75. return true;
  76. }
  77. @Override
  78. public boolean onQueryTextChange(String newText) {
  79. String userInput = newText.toLowerCase();
  80. ArrayList&lt;File&gt; myfile = new ArrayList&lt;&gt;();
  81. for (File pdf : pdffiles){
  82. if (pdf.getName().toLowerCase().contains(userInput)){
  83. myfile.add(pdf);
  84. }
  85. adapter.updatePdfFile(myfile);
  86. }
  87. return true;
  88. }
  89. }

pdfAdapter class

  1. public class pdfAdapter extends RecyclerView.Adapter&lt;pdfAdapter.MyViewHolder&gt; {
  2. private Context mContext;
  3. private ArrayList&lt;File&gt; files;
  4. String [] items;
  5. public pdfAdapter(Context mContext, ArrayList&lt;File&gt; files, String[] items) {
  6. this.mContext = mContext;
  7. this.files = files;
  8. this.items = items;
  9. }
  10. @NonNull
  11. @Override
  12. public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  13. View view = LayoutInflater.from(mContext).inflate(R.layout.pdf_items, parent, false);
  14. return new MyViewHolder(view);
  15. }
  16. @Override
  17. public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
  18. holder.file_name.setText(items[position]);
  19. holder.popUpMenu.setOnClickListener(new View.OnClickListener() {
  20. @Override
  21. public void onClick(final View v) {
  22. PopupMenu popupMenu = new PopupMenu(mContext, v);
  23. popupMenu.getMenuInflater().inflate(R.menu.menu, popupMenu.getMenu());
  24. popupMenu.show();
  25. popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
  26. @Override
  27. public boolean onMenuItemClick(MenuItem item) {
  28. switch (item.getItemId()){
  29. // case R.id.edit:
  30. // Toast.makeText(mContext, &quot;Edit&quot;, Toast.LENGTH_SHORT).show();
  31. // break;
  32. case R.id.delete:
  33. // Toast.makeText(mContext, &quot;Delete&quot;, Toast.LENGTH_SHORT).show();
  34. deleteFile(position, v);
  35. }
  36. return true;
  37. }
  38. public void deleteFile (final int position, View v) {
  39. String uri = files.get(position).getAbsolutePath();
  40. final File file = new File (uri);
  41. boolean deleted = file.delete();
  42. if (deleted) {
  43. files.remove(position);
  44. notifyItemRemoved(position);
  45. notifyItemRangeChanged(position, files.size());
  46. Toast.makeText(mContext, &quot;Delete sucessfully&quot;, Toast.LENGTH_SHORT).show();
  47. }
  48. }
  49. });
  50. }
  51. });
  52. holder.pdf_Layouts.setOnClickListener(new View.OnClickListener() {
  53. @Override
  54. public void onClick(View v) {
  55. Intent intent = new Intent(mContext, PdfViewActivity.class);
  56. intent.putExtra(&quot;position&quot;, position);
  57. mContext.startActivity(intent);
  58. }});
  59. }
  60. @Override
  61. public int getItemCount() {
  62. return files.size();
  63. }
  64. public class MyViewHolder extends RecyclerView.ViewHolder{
  65. TextView file_name;
  66. ImageView file_icon,popUpMenu;
  67. RelativeLayout pdf_Layouts;
  68. public MyViewHolder(@NonNull View itemView) {
  69. super(itemView);
  70. file_name = itemView.findViewById(R.id.pdf_item_name);
  71. file_icon = itemView.findViewById(R.id.img_pdf);
  72. pdf_Layouts = itemView.findViewById(R.id.pdf_items_h);
  73. popUpMenu = itemView.findViewById(R.id.more);
  74. }
  75. }
  76. void updatePdfFile(ArrayList&lt;File&gt; fileArrayList){
  77. //
  78. files.clear();
  79. files.addAll(fileArrayList);
  80. notifyDataSetChanged();
  81. }
  82. }

答案1

得分: 1

你没有将适配器分配给你的类变量 static pdfAdapter adapter;

private void intiViews() 函数中将:

pdfAdapter adapter = new pdfAdapter(getContext(), pdffiles, items); 替换为

adapter = new pdfAdapter(getContext(), pdffiles, items);

英文:

You are not assigning adapter to your class variable static pdfAdapter adapter;

In private void intiViews() function change:

pdfAdapter adapter = new pdfAdapter(getContext(), pdffiles, items); to

adapter = new pdfAdapter(getContext(), pdffiles, items);

huangapple
  • 本文由 发表于 2020年8月28日 13:54:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/63628213.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定