在settext中asynktask中的NullPointerException

时间:2012-11-09 13:46:05

标签: android android-asynctask textview nullpointerexception settext

我的活动中有Asynctask。问题是当我在onPostExecute()中设置setText时,它给了我NullPointerException。自定义对话框XML中的textview。我试图将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 个答案:

答案 0 :(得分:1)

你说TextViews在你的Dialog中然后你必须调用myDialog.findViewById()来获取视图。 否则findViewById()会尝试在您的Activity中找到它。

答案 1 :(得分:0)

TextView likeText = (TextView) findViewById(R.id.likenumber);
 TextView dislikeText = (TextView) findViewById(R.id.dislikenumber);

这应该在您通过Oncreate()设置xml文件后的setcontentview()方法中定义。

答案 2 :(得分:0)

它返回null,因为您没有向findViewById(int)

询问正确的组件

你必须在onCreateDialog(或类似的东西)中膨胀你的自定义XML时这样做。那个你设置为对话框布局的视图,你必须要求该视图到findViewById(),然后你的TextView将在那里。

答案 3 :(得分:0)

首先,你的xml中你应该在setContentView中有你的id.id.likenumber和R.id.dislikenumber,如果你使用了对话的自定义XML,那么你可以使用

  TextView likeText = (TextView) YOURDIALOG.findViewById(R.id.likenumber);
  TextView dislikeText = (TextView) YOURDIALOG.findViewById(R.id.dislikenumber);
  likeText.setText(like);
  dislikeText.setText(disLike);