';java.lang.String android.content.Context.getPackageName()';关于空对象引用
尝试调用虚拟方法“java.lang.String” 空对象引用上的android.content.Context.getPackageName() 我知道这个问题在这里问了很多次,但我不能解决这个问题 我是android新手,我无法解决这个问题 我想点击卡片视图并开始新的活动 我为此编写了代码,但问题是当我点击cardview时会出现此错误 请告诉我怎么解决这个问题 下面是我的代码 Maia活动';java.lang.String android.content.Context.getPackageName()';关于空对象引用,android,Android,尝试调用虚拟方法“java.lang.String” 空对象引用上的android.content.Context.getPackageName() 我知道这个问题在这里问了很多次,但我不能解决这个问题 我是android新手,我无法解决这个问题 我想点击卡片视图并开始新的活动 我为此编写了代码,但问题是当我点击cardview时会出现此错误 请告诉我怎么解决这个问题 下面是我的代码 Maia活动 public class MainActivity extends AppCompatActivi
public class MainActivity extends AppCompatActivity {
private List<Data> movieList = new ArrayList<>();
private RecyclerView recyclerView;
private MoviesAdapter mAdapter;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mAdapter = new MoviesAdapter(movieList,context) ;
context = getApplicationContext();
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
prepareMovieData();
}
private void prepareMovieData() {
Data data = new Data("MadMax");
movieList.add(data);
data = new Data("MadMax1");
movieList.add(data);
data = new Data("MadMax2");
movieList.add(data);
data = new Data("MadMax3");
movieList.add(data);
data = new Data("MadMax4");
movieList.add(data);
mAdapter.notifyDataSetChanged();
}
}
public类MainActivity扩展了AppCompatActivity{
private List movieList=new ArrayList();
私人回收站;
私人电影;
私人语境;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);
mAdapter=新的MoviesAdapter(movieList,context);
context=getApplicationContext();
RecyclerView.LayoutManager mLayoutManager=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
prepareMovieData();
}
私有void prepareMovieData(){
数据数据=新数据(“MadMax”);
添加(数据);
数据=新数据(“MadMax1”);
添加(数据);
数据=新数据(“MadMax2”);
添加(数据);
数据=新数据(“MadMax3”);
添加(数据);
数据=新数据(“MadMax4”);
添加(数据);
mAdapter.notifyDataSetChanged();
}
}
适配器
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
private List<Data> moviesList;
private Context context;
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.single_row_layout, parent, false);
return new MyViewHolder(itemView);
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
public TextView title;
public View view;
public MyViewHolder(View v) {
super(v);
view = v;
title = (TextView) view.findViewById(R.id.title);
}
}
public MoviesAdapter(List<Data> moviesList,Context context) {
this.moviesList = moviesList;
this.context = context;
}
@Override
public void onBindViewHolder(MyViewHolder holder,int position) {
Data data = moviesList.get(position);
holder.title.setText(data.getTitle());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context,Parts.class);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return moviesList.size();
}
}
公共类MoviesAdapter扩展了RecyclerView.Adapter{
私人名单电影名单;
私人语境;
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(右布局、单行布局、父级、假);
返回新的MyViewHolder(itemView);
}
公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图标题;
公众观点;
公共MyViewHolder(视图v){
超级(五);
视图=v;
title=(TextView)view.findViewById(R.id.title);
}
}
公共MoviesAdapter(列表moviesList,上下文){
this.moviesList=moviesList;
this.context=上下文;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
数据数据=moviesList.get(位置);
holder.title.setText(data.getTitle());
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意图=新意图(上下文、部分、类);
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回moviesList.size();
}
}
Logcat
02-25 18:05:43.121 11930-11930/com.example.owner.theconstitutionofindia E/AndroidRuntime:
致命异常:主
进程:com.example.owner.theconstitutionofindia,PID:11930
java.lang.NullPointerException:尝试调用虚拟方法
空值上的“java.lang.String android.content.Context.getPackageName()”
对象引用
位于android.content.ComponentName.(ComponentName.java:77)
位于android.content.Intent.(Intent.java:4170)
在
com.example.owner.theconstitutionofindia.MoviesAdapter$1.onClick(MoviesAdapter.java:86)
在android.view.view.performClick上(view.java:4785)
在android.view.view$PerformClick.run(view.java:19884)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5343)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
请告诉我如何解决此问题,以及如何通过“卡片视图”启动新活动。试试这个
context=MainActivity.this
mAdapter = new MoviesAdapter(movieList,context) ;
在代码中
mAdapter = new MoviesAdapter(movieList,context) ;
context = getApplicationContext();
在初始化上下文之前,您正在使用它。
成功
也使
context = getApplicationContext();
到
首先检查两个文件是否在同一个包中,并将活动也传递给适配器。不要只是传递上下文并将其转换为活动
public MoviesAdapter(List<Data> moviesList,Context context, Activity activity) {
this.moviesList = moviesList;
this.context = context;
this,activity = activity;
}
首先检查两个文件是否在同一个包中,并将活动也传递给适配器。谢谢
context = MainActivity.this;
public MoviesAdapter(List<Data> moviesList,Context context, Activity activity) {
this.moviesList = moviesList;
this.context = context;
this,activity = activity;
}
context = ActivityName.this;