在我的代碼下面上下文爲空。不知道如何解決....請幫我解決,android - context null while AsyncTask
我在使用RecyclerView
,onBindViewHolder
時onClick
上下文變成了NULL。可能是因爲我得到空指針異常。而一個更重要的一點是在mainActivity
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);
}
}
}
我的AsyncTask代碼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();
}
}
我收到錯誤:
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)
請發送你的ansyntask請 –
你在哪裏設置你的mContext變量? – Nanoc
我創建了Context mContext;在onCreate方法之上。而我正在調用適配器類CardAdapter(mContext);我正在使用 –