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;