2017-03-02 112 views
-3

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

我知道这个问题问这里的很多时间,但我不能能解决这个 我在android系统是新的我是能不能够解决这个问题

我想点击卡片视图和开始新的活动 我为此编写代码,但问题是这个错误来,当我打卡尔夫IEW

请告诉我如何解决这个

下面是我的代码

马亚活动

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 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(); 
} 
} 

logcat的

02-25 18:05:43.121 11930-11930/com.example.owner.theconstitutionofindia E/AndroidRuntime: 致命异常:主 工艺:com.example.owner.theconstitutionofindia,PID:11930 显示java.lang.NullPointerException :试图在android.content上的android.content.ComponentName。(ComponentName.java:77) 上调用虚拟方法 'java.lang.String android.content.Context.getPackageName()'对象参考 。 Intent。(Intent.java:4170) at com.example.owner.theconstitutionofindia.MoviesAdapter $ 1.onClick(MoviesAdapter.java:86) at android.view.View.performClick(View.java:4785) at android.view.View $ PerformClick.run(View.java:19884) at 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(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.ru N(ZygoteInit.java:905) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

请告诉我如何解决这个问题,以及如何开始通过卡新活动视图。

+0

首先检查两个文件是否在同一个包中,并且也将活动传递给适配器。 –

+0

谢谢你回复它的工作 –

回答

2

试试这个

context=MainActivity.this 
mAdapter = new MoviesAdapter(movieList,context) ; 
+0

没有它没有工作。仍然是同样的事情发生 –

+0

一旦上下文初始化替换getApplicationContext的所有入口与上下文 –

+0

感谢兄弟现在的工作。 –

0

在你的代码

mAdapter = new MoviesAdapter(movieList,context) ; 
context = getApplicationContext(); 

初始化它之前,你正在使用context。 让它

context = getApplicationContext(); 
mAdapter = new MoviesAdapter(movieList,context) ; 

也使

context = getApplicationContext(); 

context = MainActivity.this; 
+0

是的,我让这个权利 –

+0

好..快乐编码:) – Akshay

0

第一次检查,如果在同一个封装中两个文件,还通过活动适配器了。不要只传递上下文并将其转换为活动。

public MoviesAdapter(List<Data> moviesList,Context context, Activity activity) { 
this.moviesList = moviesList; 
this.context = context; 
this,activity = activity; 
} 

这种方法并不总是工作;

context = ActivityName.this; 
相关问题