0

アクティビティにAsynctaskがあります。問題は、onPostExecute()でsetTextを実行すると、NullPointerExceptionが発生することです。カスタムダイアログXMLのテキストビュー。TextView変数をグローバルとして配置しようとしましたが、同じことです。トーストは正常に機能しています。これは私のコードです:

private class LikeDislike extends AsyncTask<String, Integer, JSONObject> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected JSONObject doInBackground(String... params) {
            UserFunctions userFunction = new UserFunctions();
            JSONObject json;
            json = userFunction.likeDislike(params[0]);
            return json;
        }

        @Override
        protected void onPostExecute(JSONObject json) {
            super.onPostExecute(json);

            try {
                if (json.getString(KEY_SUCCESS) != null) {
                    //registerErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(res) == 1){
                        String like = json.getString("like");
                        String disLike = json.getString("dislike");
                        TextView likeText = (TextView) findViewById(R.id.likenumber);
                        TextView dislikeText = (TextView) findViewById(R.id.dislikenumber);
                        likeText.setText(like);
                        dislikeText.setText(disLike);
                        //TODO
                    }else{      
                        Context context = getApplicationContext();
                        int duration = Toast.LENGTH_LONG;
                        Toast toast = Toast.makeText(context, "error in parsing", duration);
                        toast.show();
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }
4

4 に答える 4

1

テキストビューがダイアログにあると言っている場合は、myDialog.findViewById()を呼び出してビューを取得する必要があります。それ以外の場合、findViewById()はアクティビティでそれを見つけようとします。

于 2012-11-09T14:07:38.670 に答える
0
TextView likeText = (TextView) findViewById(R.id.likenumber);
 TextView dislikeText = (TextView) findViewById(R.id.dislikenumber);

Oncreate()これは、を介してxmlファイルを設定した後のメソッドで定義する必要がありますsetcontentview()

于 2012-11-09T13:49:42.020 に答える
0

適切なコンポーネントを要求していないため、nullが返されます。findViewById(int)

onCreateDialog(または同様のもの。ダイアログレイアウトとして設定しているそのビューにそのビューを要求するfindViewById()と、TextViewがそこに表示されます)内でカスタムXMLを膨らませながらそれを行う必要があります。

于 2012-11-09T14:05:30.473 に答える
0

まず、ID R.id.likenumberとR.id.dislikenumberがsetContentViewにあるxmlに含まれている必要があります。また
、ダイアログにカスタムXMLを使用している場合は、

  TextView likeText = (TextView) YOURDIALOG.findViewById(R.id.likenumber);
  TextView dislikeText = (TextView) YOURDIALOG.findViewById(R.id.dislikenumber);
  likeText.setText(like);
  dislikeText.setText(disLike);   
于 2012-11-09T14:09:09.693 に答える