android-使用AsyncTask时上下文为空

android-使用AsyncTask时上下文为空,android,android-asynctask,nullpointerexception,android-adapter,android-context,Android,Android Asynctask,Nullpointerexception,Android Adapter,Android Context,在我下面的代码中,上下文为空。不知道如何解决。。。。请帮帮我 我正在使用RecyclerView,在onBindViewHolder中单击onClick时,上下文变为空。可能是因为我得到了空指针异常。还有一个关键点是主要活动 mAdapter = new CardAdapter(mContext); mRecyclerView.setAdapter(mAdapter); 当我在AsyncTask中使用上述代码时,我得到了一个错误。。。。如果我没有使用AsyncTask我不会得到任何错误 p

在我下面的代码中,上下文为空。不知道如何解决。。。。请帮帮我

我正在使用
RecyclerView
,在
onBindViewHolder
中单击
onClick
时,上下文变为空。可能是因为我得到了空指针异常。还有一个关键点是主要活动

mAdapter = new CardAdapter(mContext);  
mRecyclerView.setAdapter(mAdapter);
当我在
AsyncTask
中使用上述代码时,我得到了一个错误。。。。如果我没有使用
AsyncTask
我不会得到任何错误

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {

List<NatureItem> mItems;
public Context context;
NatureItem nature = new NatureItem();

public CardAdapter(Context context) {
    super();
    this.context = context;
    mItems = new ArrayList<NatureItem>();

    nature = new NatureItem();
    nature.setName("Aurora Borealis");
    nature.setThumbnail(R.drawable.aurora_borealis);
    mItems.add(nature);
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.recycler_view_card_item, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder viewHolder, int i) {

    nature = mItems.get(i);
    viewHolder.textData.setText(nature.getName());
    viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());

    if(context!=null)

    viewHolder.commentClick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, Recorder.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    });

    if(context!=null)

    viewHolder.profileCLick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, Profile_Activity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    });

}

@Override
public int getItemCount() {
    return mItems.size();
}

class ViewHolder extends RecyclerView.ViewHolder{
    public ImageView imgThumbnail;
    public TextView textData;
    public ImageButton profileCLick;
    public ImageButton commentClick;

    public ViewHolder(View itemView) {
        super(itemView);
        imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
        textData = (TextView)itemView.findViewById(R.id.tv_nature);
        profileCLick = (ImageButton) itemView.findViewById(R.id.imageButton11);
        commentClick = (ImageButton) itemView.findViewById(R.id.imageButton12);

    }
}
}
公共类CardAdapter扩展了RecyclerView.Adapter{ 列出螨类; 公共语境; NatureItem nature=新的NatureItem(); 公共卡适配器(上下文){ 超级(); this.context=上下文; mItems=新的ArrayList(); nature=新的NatureItem(); 自然。设定名称(“北极光”); 自然光(R.drawable.aurora_borealis); 添加(自然); } @凌驾 公共视图持有者onCreateViewHolder(视图组视图组,int i){ 视图v=LayoutInflater.from(viewGroup.getContext()) .充气(R.layout.recycler\u view\u card\u项目,视图组,false); 视窗夹持器视窗夹持器=新视窗夹持器(v); 返回视图持有者; } @凌驾 公共无效onBindViewHolder(最终ViewHolder ViewHolder,int i){ 自然=米特姆斯。格特(i); viewHolder.textData.setText(nature.getName()); viewHolder.imgThumbnail.setImageResource(nature.getThumbnail()); if(上下文!=null) viewHolder.commentClick.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ 意图=新意图(上下文,Recorder.class); intent.setFlags(intent.FLAG\u活动\u新任务); 背景。开始触觉(意图); } }); if(上下文!=null) viewHolder.profileCLick.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ 意向意向=新意向(上下文、概要文件和活动类); intent.setFlags(intent.FLAG\u活动\u新任务); 背景。开始触觉(意图); } }); } @凌驾 public int getItemCount(){ 返回mItems.size(); } 类ViewHolder扩展了RecyclerView.ViewHolder{ 公共图像查看imgthumbail; 公共文本查看文本数据; 公共图像按钮点击; 点击公共图像按钮; 公共视图持有者(视图项视图){ 超级(项目视图); imgThumbnail=(ImageView)itemView.findViewById(R.id.img_缩略图); textData=(TextView)itemView.findViewById(R.id.tv_nature); profileCLick=(ImageButton)itemView.findViewById(R.id.imageButton11); commentClick=(ImageButton)itemView.findViewById(R.id.imageButton12); } } } MainActivity中的我的异步任务代码

    Context mContext;
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
      mRecyclerView.setHasFixedSize(true);

      mLayoutManager = new LinearLayoutManager(this);
      mRecyclerView.setLayoutManager(mLayoutManager);
      registerForContextMenu(mRecyclerView);

      new RemoteDataTask().execute();

    }

    // RemoteDataTask AsyncTask
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(MainActivity.this);
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        mAdapter = new CardAdapter(mContext);
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        mRecyclerView.setAdapter(mAdapter);
        mProgressDialog.dismiss();

    }
}
Context-mContext;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView=(RecyclerView)findViewById(R.id.recycler\u视图);
mRecyclerView.setHasFixedSize(true);
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(mllayoutmanager);
registerForContextMenu(mRecyclerView);
新建RemoteDataTask().execute();
}
//远程数据任务异步任务
私有类RemoteDataTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
mProgressDialog=新建ProgressDialog(MainActivity.this);
设置消息(“加载…”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
mAdapter=新卡适配器(mContext);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
mRecyclerView.setAdapter(mAdapter);
mProgressDialog.disclose();
}
}
我得到一个错误:

java.lang.NullPointerException
        at android.content.ComponentName.<init>(ComponentName.java:75)
        at android.content.Intent.<init>(Intent.java:3697)
        at com.example.intellisoft.a2a.CardAdapter$2.onClick(CardAdapter.java:189)
        at android.view.View.performClick(View.java:4293)
        at android.view.View$PerformClick.run(View.java:17535)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:153)
        at android.app.ActivityThread.main(ActivityThread.java:5299)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
        at dalvik.system.NativeStart.main(Native Method)
java.lang.NullPointerException
位于android.content.ComponentName。(ComponentName.java:75)
位于android.content.Intent.(Intent.java:3697)
位于com.example.intellisoft.a2a.cardapter$2.onClick(cardapter.java:189)
在android.view.view.performClick上(view.java:4293)
在android.view.view$PerformClick.run(view.java:17535)
位于android.os.Handler.handleCallback(Handler.java:725)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:153)
位于android.app.ActivityThread.main(ActivityThread.java:5299)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:833)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
在dalvik.system.NativeStart.main(本机方法)
在onClick()方法中,您是否尝试过从“v”-view对象获取上下文。 像


并且,检查是否可以使用此“上下文”对象启动活动。

尝试在onCreate()方法中添加以下行:


由于传递了null上下文,因此获得了null。

请发布您的ansyntask。您在哪里设置mContext变量?我创建了上下文mContext;在onCreate方法之上。当我调用适配器类CardAdapter(mContext)时;我使用的是你没有分配mContext变量。你正在向适配器传递相同的null引用。因此你得到的是null指针。我在android中没有这样做,分配mContext的内容。。。(这不像int/sting)…但我还是得到了同样的错误。。。。我提到了错误,请检查一下…你是否使用相同的上下文创建了意图。我非常抱歉,。。。。它在工作。。。。你是对的。。。我用你的想法创造了新的环境。。。使用旧的。。非常感谢你,伙计……太好了!很高兴知道。
Context context = v.getContext();
mContext = this;