-1

在我的代碼下面上下文爲空。不知道如何解決....請幫我解決,android - context null while AsyncTask

我在使用RecyclerView,onBindViewHolderonClick上下文變成了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) 
+0

請發送你的ansyntask請 –

+0

你在哪裏設置你的mContext變量? – Nanoc

+0

我創建了Context mContext;在onCreate方法之上。而我正在調用適配器類CardAdapter(mContext);我正在使用 –

回答

1

在onClick()方法中,您是否嘗試從'v' - view對象獲取上下文。 一樣,

Context context = v.getContext(); 

而且,檢查是否可以開始使用這種「語境」對象的活動。

+0

我嘗試了U建議.. –

+0

仍然出現同樣的錯誤....我提到了錯誤,請檢查一次... –

+0

您是否使用相同的上下文創建了這個意圖。 – manoj

1

試着在你的onCreate()方法中添加以下行:

mContext = this; 

你,因爲你已經通過空背景下得到了空。

+0

酷......烏爾的想法也在工作....謝謝..... –