Java AsyncTask中的ProgressDialog在片段中崩溃

Java AsyncTask中的ProgressDialog在片段中崩溃,java,asynchronous,android-asynctask,fragment,progressdialog,Java,Asynchronous,Android Asynctask,Fragment,Progressdialog,我在活动中有一个片段和异步任务。但当我运行搜索时,会出现以下异常: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference. 这与不知道活动是否正在运行的片段有关,但我不知道如何修复它。 请帮忙。 代码如下: class Send_API extends AsyncTask<Str

我在
活动
中有一个
片段
异步任务
。但当我运行搜索时,会出现以下异常:

Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference.
这与不知道活动是否正在运行的片段有关,但我不知道如何修复它。 请帮忙。 代码如下:

class Send_API extends AsyncTask<String, Void, String> {

        private ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            if (movieList != null){
                movieList.clear();
                adapter.notifyDataSetChanged();
            }

            dialog = new ProgressDialog(getActivity());
            dialog.setMessage("Searching...");
            dialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            String queryString = null;
            try {
                queryString = "" +
                        "s=" + URLEncoder.encode(txt, "utf-8");
            } catch (UnsupportedEncodingException e) {
            }
            return HttpHandler.get(params[0], queryString);
        }


        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            dialog.dismiss();
            if (result == null) {
                Toast.makeText(getActivity(), "error getting results...", Toast.LENGTH_LONG).show();

            } else {

                try {
                    JSONObject json = new JSONObject(result);

                    JSONArray searchArray = json.getJSONArray("Search");

                    for (int i = 0; i < searchArray.length(); i++) {
                        JSONObject searchObject = searchArray.getJSONObject(i);
                        String title = searchObject.getString("Title");
                        String type = searchObject.getString("Type");
                        String year = searchObject.getString("Year");
                        String imdbID = searchObject.getString("imdbID");
                        String poster_url = searchObject.getString("Poster");
                        movieList.add(new Movie(title, type, year, imdbID, poster_url));

                        Log.e(TAG, "MovieList is " + movieList);


                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getActivity(), "error parsing results...", Toast.LENGTH_LONG).show();
                }

                adapter.notifyDataSetChanged();

            }
        }

    }
类发送\u API扩展异步任务{
私人对话;
@凌驾
受保护的void onPreExecute(){
if(movieList!=null){
movieList.clear();
adapter.notifyDataSetChanged();
}
dialog=newprogressdialog(getActivity());
设置消息(“搜索…”);
dialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串queryString=null;
试一试{
queryString=“”+
“s=“+URLEncoder.encode(txt,“utf-8”);
}捕获(不支持的编码异常e){
}
返回HttpHandler.get(参数[0],queryString);
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
dialog.dismise();
如果(结果==null){
Toast.makeText(getActivity(),“获取结果时出错…”,Toast.LENGTH_LONG.show();
}否则{
试一试{
JSONObject json=新的JSONObject(结果);
JSONArray searchArray=json.getJSONArray(“搜索”);
对于(int i=0;i
初始化
片段时,
getActivity()
将返回null。您必须等到片段生命周期中的
onAttach()
,它才会返回非null

这就是为什么要进行
NPE

总的来说,片段中没有非默认构造函数。仅在
onCreateView()
中设置片段视图

初始化
片段时,
getActivity()
将返回null。您必须等到片段生命周期中的
onAttach()
,它才会返回非null

这就是为什么要进行
NPE


总的来说,片段中没有非默认构造函数。仅在
onCreateView()
中设置片段视图,尝试将基本上下文传递给您的asynctask,并将
getActivity()
替换为它或
getApplicationContext()
尝试将基本上下文传递给您的asynctask,并将
getActivity()
替换为它或
getApplicationContext()
谢谢,但是我不明白,我必须在
onAttach
上做什么从那里获取
context
?它仍然不起作用,即使我添加了:
@Override public void onAttach(context context){super.onAttach(context);}
谢谢,但我不明白,在
onAttach
上我必须做什么?从那里获取
context
?即使我添加了:
@Override public void onAttach(context context){super.onAttach(context);}
请发布完整日志请向我们展示创建和执行“发送API”的代码请发布完整日志请向我们展示创建和执行“发送API”的代码
  dialog = new ProgressDialog(getActivity());