Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';java.lang.String android.content.Context.getPackageName()';关于空对象引用_Android - Fatal编程技术网

';java.lang.String android.content.Context.getPackageName()';关于空对象引用

';java.lang.String android.content.Context.getPackageName()';关于空对象引用,android,Android,尝试调用虚拟方法“java.lang.String” 空对象引用上的android.content.Context.getPackageName() 我知道这个问题在这里问了很多次,但我不能解决这个问题 我是android新手,我无法解决这个问题 我想点击卡片视图并开始新的活动 我为此编写了代码,但问题是当我点击cardview时会出现此错误 请告诉我怎么解决这个问题 下面是我的代码 Maia活动 public class MainActivity extends AppCompatActivi

尝试调用虚拟方法“java.lang.String” 空对象引用上的android.content.Context.getPackageName()

我知道这个问题在这里问了很多次,但我不能解决这个问题 我是android新手,我无法解决这个问题

我想点击卡片视图并开始新的活动 我为此编写了代码,但问题是当我点击cardview时会出现此错误

请告诉我怎么解决这个问题

下面是我的代码

Maia活动

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;