Android 上下文在另一个活动的片段中不可用

Android 上下文在另一个活动的片段中不可用,android,android-fragments,android-asynctask,android-gridview,Android,Android Fragments,Android Asynctask,Android Gridview,我有一项关于抽屉布置的活动。我在这个活动xml文件的FrameLayout中膨胀一个片段。Xml文件包含LinearLayout中的GridView。 我在activitycreated方法的片段中对这个GridView应用setOnItemClickListener。 但在这个方法中,我调用的是活动的AsyncTask类。 因此,当我从setOnItemClickListener调用此AsyncTask时,我没有获得上下文。 如果可能的话,请给我一些建议如何做或其他选择 我的活动 在片段库设计

我有一项关于抽屉布置的活动。我在这个活动xml文件的FrameLayout中膨胀一个片段。Xml文件包含LinearLayout中的GridView。 我在activitycreated方法的片段中对这个GridView应用setOnItemClickListener。 但在这个方法中,我调用的是活动的AsyncTask类。 因此,当我从setOnItemClickListener调用此AsyncTask时,我没有获得上下文。 如果可能的话,请给我一些建议如何做或其他选择

我的活动

在片段库设计中,您需要使用getActivity作为上下文的替代

getActivity Return theActivity`此片段当前与关联

Android文档:

MainActivity getActivity可用于您的活动

在片段库设计中,您需要使用getActivity作为上下文的替代

getActivity Return theActivity`此片段当前与关联

Android文档:

MainActivity getActivity可用于您的活动


有几种方法可以获取上下文:

如果您正在参加活动:

如果您在片段中:

如果在片段中获取内部类ex.Asynctask中的上下文:

如果要在活动中的内部类例如Asynctask中获取上下文:

编辑:

更改此项:

为此:


有几种方法可以获取上下文:

如果您正在参加活动:

如果您在片段中:

如果在片段中获取内部类ex.Asynctask中的上下文:

如果要在活动中的内部类例如Asynctask中获取上下文:

编辑:

更改此项:

为此:

创建私有上下文mContext

现在您可以使用mContext而不是getActivity

创建私有上下文mContext



现在您可以使用mContext而不是getActivity

在Fragement for Context中,您可以使用getActivity来使用活动的上下文。我可以在Fragment中访问上下文,但当我调用AsyncTask时,在AsyncTask中我无法获取上下文。在Fragement for Context中发布您的活动主类您可以使用getActivity,使用活动的上下文。我可以访问片段中的上下文,但当我调用AsyncTask时,在AsyncTask内部我无法获取上下文。发布活动主classI可以访问片段中的上下文,但当我调用AsyncTask时,在AsyncTask内部我无法获取上下文。您可以只传递getActivity而不是ConetText将工作。我从getActivity获取片段中的上下文。但我在片段中调用AsyncTask调用,并且AsyncTask类在MainActivity类中定义。现在在这个AsyncTask中,我无法创建任何视图或无法实例化数据库。@ved将活动的上下文传递给AsyncTask的构造函数并使用它为什么不将上下文传递给Asyntask?您可以使用上下文本身创建视图和数据库,所以您可以更改AsyntTask。使用上下文而不是活动。我可以访问片段中的上下文,但是当我调用AsyncTask时,在AsyncTask内部我无法获取上下文。您可以只传递getActivity而不是ConetText,这将起作用。我从getActivity获取片段中的上下文。但是我在片段中调用AsyncTask调用,并且AsyncTask类在中定义主要活动课。现在在这个AsyncTask中,我无法创建任何视图或无法实例化数据库。@ved将活动的上下文传递给AsyncTask的构造函数并使用它为什么不将上下文传递给Asyntask?您可以使用上下文本身创建视图和数据库,所以您可以更改AsyntTask。使用上下文而不是activity.when我传递Fragment_class_name.this.getActivity;在AsyncTask构造函数中,它的工作是视图初始化,但在AsyncTask的PostExecute中,调用StartActivityContent时,我得到的是NullPointerException。调试器显示mAction=null@ved发布你的asynctask,我来看看。我已经添加了我的活动类,其中包含asynctask类。现在,当我传递Fragment\u class\u name.this.getActivity时,它在startActivityContent.com上给出了NullPointerException;在AsyncTask构造函数中,它的工作是视图初始化,但在AsyncTask的PostExecute中,调用StartActivityContent时,我得到的是NullPointerException。调试器显示mAction=null@ved发布你的asynctask,我来看看。我已经添加了我的活动类,其中包含asynctask类。现在它在StartActivityContent上给出了NullPointerException。
class GetExamList extends AsyncTask<String, String, String>{
    Context context;

    public GetExamList(Context mContext){
        context=mContext;
    }

    @Override
    protected void onPreExecute() {     
     super.onPreExecute();
     pDialog = new ProgressDialog(context);
     pDialog.setMessage("Fetching Test List");
     pDialog.setIndeterminate(false);
     pDialog.setCancelable(true);
     pDialog.show();        
    }

    @Override
    protected String doInBackground(String... params) {

         exam_id=1;         
         List<NameValuePair> list = new ArrayList<NameValuePair>();
         list.add(new BasicNameValuePair("exam_id", exam_id+""));

         JSONObject json = jsonParser.makeHttpRequest(url_exam_list,
                    "POST", list);

        // check for success tag
            try {
                int success = json.getInt("flag");
                Log.d("flag", success+"");                  

                if (success == 1) {
                    //fetch exam list
                    JSONArray elist=json.getJSONArray("testdata");
                    Log.d("flag=1", "in try of HomeExamList");

                    for (int i = 0; i < elist.length(); i++) {

                        JSONObject obj=elist.getJSONObject(i);

                        int testId=obj.getInt("test_id");
                        String testName=obj.getString("test_name");

                        Log.d("elist  test_id", testId+"");
                        Log.d("elist  test_name", testName);

                        Test test=new Test();
                        test.setExam_id(exam_id);
                        test.setTest_id(testId);
                        test.setTest_name(testName);

                        Dao dao=new Dao(context);
                        dao.open();

                        boolean check=dao.chechTestIdInTestList(testId);
                        if(!check)  dao.insertTestList(test);

                        dao.close();
                    }


                } else {
                    // failed to create product
                    Toast.makeText(getApplicationContext(), "unsuccessful", 2000).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }


        return null;
    }

    @Override
    protected void onPostExecute(String result) {
    // TODO Auto-generated method stub
     super.onPostExecute(result);
     pDialog.dismiss();

     Intent intent = new Intent(context, ExamList.class);
     intent.putExtra("eid", exam_id);                    
     startActivity(intent);

    }           
}
this;//will call your activity's context
getApplicationContext();//will get the whole application context
getActivity();//will call the activity context
Fragment_class_name.this.getActivity();//explicitly get the reference of your fragment and call the context
Activity_class_name.this;//explicitly get the reference of your activity context
startActivity(intent);
context.startActivity(intent);
mContext=getActivity();