[英]ProgressDialog in AsyncTask in Fragment crashes
我在Activity
有一個帶有AsyncTask
的Fragment
。 但是在運行搜索時出現此異常:
Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference.
它與Fragment不知道Activity是否正在運行有關,但是我不知道如何解決它。 請幫忙。 這是代碼:
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();
}
}
}
dialog = new ProgressDialog(getActivity());
初始化Fragment
時, getActivity()
將返回null。 您必須等到片段生命周期中的onAttach()
,它才能返回非null值。
這就是NPE
的原因。
總體而言,片段中不要包含非默認構造函數。 僅在onCreateView()
設置片段視圖。
嘗試將基本上下文傳遞給您的asynctask,並用它或getApplicationContext()
替換getActivity()
getApplicationContext()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.