簡體   English   中英

片段中AsyncTask中的ProgressDialog崩潰

[英]ProgressDialog in AsyncTask in Fragment crashes

我在Activity有一個帶有AsyncTaskFragment 但是在運行搜索時出現此異常:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM