我正在尝试从外部应用程序(如Facebook,Gmail等)生成的通知中获取提名信息。 我成功获取了通知的内容和标题,并且还将该内容和标题链接到了Main activity上的Recyclerview中。 但是,当我尝试获取通知的应用程序图标时,收到一条错误消息,显示'java.lang.NullPointerException:尝试调用虚拟方法'android.content.pm.PackageManager com.example.noticrawler.Mainactivity。
上的空对象引用上的getPackageManager()'Drawable icon = ac.getPackageManager().getapplicationIcon(data.getPkg_name());
holder.icon.setImageDrawable(icon);
请帮助我解决这个问题。
所有代码行
package com.example.noticrawler;
import android.app.activity;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private activity activity;
private List<App> app;
public Mainactivity ac;
public RecyclerViewAdapter(activity activity,List<App> person) {
this.activity = activity;
this.app = person;
}
@Override
public int getItemCount() {
return app.size();
}
public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View view = LayoutInflater.from(parent.getcontext()).inflate(R.layout.item,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder,final int position) {
App data = app.get(position);
// binding Data
holder.notiTitle.setText(data.getNotiTitle());
holder.notiText.setText(data.getNotiText());
try{
Drawable icon = ac.getPackageManager().getapplicationIcon(data.getPkg_name());
holder.icon.setImageDrawable(icon);
}
catch (PackageManager.NameNotFoundException e)
{
}
}
private void removeItemView(int position) {
app.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position,app.size());
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView notiTitle;
TextView notiText;
ImageView icon;
public ViewHolder(View itemView) {
super(itemView);
notiTitle = (TextView) itemView.findViewById(R.id.notititle);
notiText = (TextView) itemView.findViewById(R.id.notitext);
icon = (ImageView) itemView.findViewById(R.id.app_icon);
itemView.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View view) {
Toast.makeText(activity,"click " +
app.get(getadapterPosition()).getNotiTitle(),Toast.LENGTH_SHORT).show();
}
});
itemView.setOnLongClicklistener(new View.OnLongClicklistener() {
@Override
public boolean onLongClick(View view) {
Toast.makeText(activity,"remove " +
app.get(getadapterPosition()).getNotiTitle(),Toast.LENGTH_SHORT).show();
removeItemView(getadapterPosition());
return false;
}
});
}
}
}