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());