尝试调用虚拟方法';void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatepdfffile(java.util.ArrayList)和#x27;关于空对象引用
当我在searchView中键入搜索项目的文本时,我的应用程序会崩溃。我有一个片段和适配器。我下一步做什么?有人帮帮我 这就是我犯的错误- 尝试在空对象引用上调用虚拟方法“void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatePdfFile(java.util.ArrayList)” 这是片段代码尝试调用虚拟方法';void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatepdfffile(java.util.ArrayList)和#x27;关于空对象引用,java,android,Java,Android,当我在searchView中键入搜索项目的文本时,我的应用程序会崩溃。我有一个片段和适配器。我下一步做什么?有人帮帮我 这就是我犯的错误- 尝试在空对象引用上调用虚拟方法“void pdfreader.pdfconverter.pdfreaderapp.pdfAdapter.updatePdfFile(java.util.ArrayList)” 这是片段代码 public class Pdf_Reader_fragments extends Fragment implements SearchV
public class Pdf_Reader_fragments extends Fragment implements SearchView.OnQueryTextListener {
public static ArrayList<File> pdffiles = new ArrayList<>();
RecyclerView recyclerView;
File folder;
String[] items;
static pdfAdapter adapter;
int number = 0;
private SwipeRefreshLayout mSwipeRefreshLayout;
public Pdf_Reader_fragments() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_pdf__reader, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.recylerView);
mSwipeRefreshLayout = view.findViewById(R.id.swip);
setHasOptionsMenu(true);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
try {
intiViews();
} catch (Exception e) {
}
Toast.makeText(getContext(), "Page Refresh", Toast.LENGTH_SHORT).show();
mSwipeRefreshLayout.setRefreshing(false);
}
});
intiViews();
return view;
}
private void intiViews() {
folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
pdffiles = getPdfFiles(folder);
ArrayList<File> mypdf = getPdfFiles(Environment.getExternalStorageDirectory());
items = new String[mypdf.size()];
for (int i = 0; i < items.length; i++) {
items[i] = mypdf.get(i).getName().replace(".pdf", "");
}
pdfAdapter adapter = new pdfAdapter(getContext(), pdffiles, items);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), RecyclerView.VERTICAL, false));
}
private ArrayList<File> getPdfFiles(File folder) {
ArrayList<File> arrayList = new ArrayList<>();
File[] file = folder.listFiles();
if (file != null) {
for (File singleFile : file) {
if (singleFile.isDirectory() && !singleFile.isHidden()) {
arrayList.addAll(getPdfFiles(singleFile));
} else {
if (singleFile.getName().endsWith(".pdf")) {
arrayList.add(singleFile);
}
}
}
}
return arrayList;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.search, menu);
MenuItem item = menu.findItem(R.id.search_button);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM);
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener(this);
}
@Override
public boolean onQueryTextSubmit(String query) {
if (adapter != null) {
query = String.valueOf(query.equals(""));
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
String userInput = newText.toLowerCase();
ArrayList<File> myfile = new ArrayList<>();
for (File pdf : pdffiles){
if (pdf.getName().toLowerCase().contains(userInput)){
myfile.add(pdf);
}
adapter.updatePdfFile(myfile);
}
return true;
}
}
公共类Pdf\u Reader\u片段扩展片段实现SearchView.OnQueryTextListener{
public static ArrayList pdffiles=new ArrayList();
回收视图回收视图;
文件夹;
字符串[]项;
静态pdfAdapter适配器;
整数=0;
私人SwipeRefreshLayout mSwipeRefreshLayout;
公共Pdf_阅读器_片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u pdf\u阅读器,容器,false);
recyclerView=(recyclerView)view.findViewById(R.id.recylerView);
mSwipeRefreshLayout=view.findViewById(R.id.swip);
设置选项菜单(真);
mSwipeRefreshLayout.setOnRefreshListener(新的SwipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
试一试{
intiViews();
}捕获(例外e){
}
Toast.makeText(getContext(),“页面刷新”,Toast.LENGTH_SHORT.show();
mSwipeRefreshLayout.setRefresh(false);
}
});
intiViews();
返回视图;
}
私有视图(){
folder=新文件(Environment.getExternalStorageDirectory().getAbsolutePath());
pdffiles=getPdfFiles(文件夹);
ArrayList mypdf=getPdfFiles(Environment.getExternalStorageDirectory());
items=新字符串[mypdf.size()];
对于(int i=0;i
pdfAdapter类
public class pdfAdapter extends RecyclerView.Adapter<pdfAdapter.MyViewHolder> {
private Context mContext;
private ArrayList<File> files;
String [] items;
public pdfAdapter(Context mContext, ArrayList<File> files, String[] items) {
this.mContext = mContext;
this.files = files;
this.items = items;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.pdf_items, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.file_name.setText(items[position]);
holder.popUpMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
PopupMenu popupMenu = new PopupMenu(mContext, v);
popupMenu.getMenuInflater().inflate(R.menu.menu, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
// case R.id.edit:
// Toast.makeText(mContext, "Edit", Toast.LENGTH_SHORT).show();
// break;
case R.id.delete:
// Toast.makeText(mContext, "Delete", Toast.LENGTH_SHORT).show();
deleteFile(position, v);
}
return true;
}
public void deleteFile (final int position, View v) {
String uri = files.get(position).getAbsolutePath();
final File file = new File (uri);
boolean deleted = file.delete();
if (deleted) {
files.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, files.size());
Toast.makeText(mContext, "Delete sucessfully", Toast.LENGTH_SHORT).show();
}
}
});
}
});
holder.pdf_Layouts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, PdfViewActivity.class);
intent.putExtra("position", position);
mContext.startActivity(intent);
}});
}
@Override
public int getItemCount() {
return files.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView file_name;
ImageView file_icon,popUpMenu;
RelativeLayout pdf_Layouts;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
file_name = itemView.findViewById(R.id.pdf_item_name);
file_icon = itemView.findViewById(R.id.img_pdf);
pdf_Layouts = itemView.findViewById(R.id.pdf_items_h);
popUpMenu = itemView.findViewById(R.id.more);
}
}
void updatePdfFile(ArrayList<File> fileArrayList){
//
files.clear();
files.addAll(fileArrayList);
notifyDataSetChanged();
}
}
公共类pdfAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有ArrayList文件;
字符串[]项;
公共pdfAdapter(上下文mContext、ArrayList文件、字符串[]项){
this.mContext=mContext;
this.files=文件;
这个项目=项目;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View=LayoutFlater.from(mContext).充气(R.layout.pdf_items,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder holder,final int位置){
holder.file_name.setText(项目[位置]);
holder.popUpMenu.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(最终视图v){
PopupMenu PopupMenu=新的PopupMenu(mContext,v);
充气(R.menu.menu,popupMenu.getMenu());
show();
setOnMenuItemClickListener(新的popupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId()){
//案例R.id.edit:
//Toast.makeText(mContext,“编辑”,Toast.LENGTH_SHORT).show();
//中断;
案例R.id.delete:
//Toast.makeText(mContext,“Delete”,Toast.LENGTH_SHORT.show();
删除文件(位置,v);
}
返回true;
}
公共无效删除文件(最终整型位置,视图v){
字符串uri=files.get(positio)