Создание класса в android findViewById() метод undefiend - Android

89
8

Я создал новый класс под названием commentasync. Я разместил findViewById() внутри секции doInBackground, и это дает мне ошибку. Вот в чем мой код. FindViewById не работает, и он не позволит мне проверить новый вид. Кнопка TextView или появится как ошибка.

    public class commentAsync extends AsyncTask<String, String, String> {

UserFunctions userFunctions;

// JSON Response node name
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_STATE = "state";
private static String KEY_USERNAME = "username";
private static String KEY_COMMENT = "comment";
private static String KEY_COMMENT_ID = "commentID";
private static String KEY_NUMBER_OF_COMMENTS = "numberOfComments";
private static String KEY_POSTED_AT = "posted_at";
private static String KEY_VERIFY = "verify";
private static String KEY_OFFSET_NUMBER = "offsetNumber";

DatabaseHandler db = new DatabaseHandler(getApplicationContext());
String usernameforcomments = db.getUserDetails();

registerErrorMsg = (TextView) findViewById(R.id.collectComment_error);
int verify = 1;
int verify2 = 1;
String offsetNumber = "null";
LinearLayout linear = (LinearLayout) this.findViewById(R.id.commentSection);

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

@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);

}

@Override
protected String doInBackground(String... params) {
return null;

UserFunctions CollectComments = new UserFunctions();
JSONObject json = CollectComments.collectComments(usernameforcomments, offsetNumber);

int commentCycle = 1;

// check for comments
try {
if (json.getString(KEY_SUCCESS) != null) {
registerErrorMsg.setText("");
String res2 = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res2) == 1){

String numberOfComments = json.getString(KEY_NUMBER_OF_COMMENTS);

String offsetNumberDb = db.getOffsetNumber();

int numberOfComments2 = Integer.parseInt(numberOfComments) - Integer.parseInt(offsetNumberDb);
offsetNumber = offsetNumberDb;

//if comment number is less than 15 or equal to 15
if(numberOfComments2 <= 15){

while (commentCycle <= numberOfComments2){

JSONObject json2 = CollectComments.collectComments(usernameforcomments, offsetNumber);

LinearLayout commentBox = new LinearLayout(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
commentBox.setBackgroundResource(R.drawable.comment_box_bg);
layoutParams.setMargins(0, 10, 0, 10);
commentBox.setPadding(0,0,0,10);
commentBox.setOrientation(LinearLayout.VERTICAL);
linear.addView(commentBox, layoutParams);

RelativeLayout commentBoxHeader = new RelativeLayout(this);
commentBoxHeader.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
commentBoxHeader.setBackgroundResource(R.drawable.comment_box_bg);
commentBoxHeader.setBackgroundResource(R.drawable.comment_box_header);
commentBox.addView(commentBoxHeader);

TextView plateView = new TextView(this);
plateView.setText(json2.getString(KEY_PLATENUMBER));
RelativeLayout.LayoutParams plateViewParam = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
plateViewParam.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
plateView.setTextColor(getResources().getColor(R.color.white));
plateView.setTextSize(15);
plateView.setPadding(10, 5, 5, 5);
plateView.setTypeface(Typeface.DEFAULT_BOLD);
commentBoxHeader.addView(plateView, plateViewParam);

TextView usernameView = new TextView(this);
usernameView.setText("Posted by: " + json2.getString(KEY_USERNAME));
RelativeLayout.LayoutParams usernameViewParam = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
usernameViewParam.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
usernameView.setTextColor(getResources().getColor(R.color.white));
usernameView.setPadding(5, 5, 10, 5);
usernameView.setTypeface(Typeface.DEFAULT_BOLD);
commentBoxHeader.addView(usernameView, usernameViewParam);

TextView commentView = new TextView(this);
commentView.setText(json2.getString(KEY_COMMENT));
LinearLayout.LayoutParams commentViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
commentViewParams.setMargins(20, 10, 20, 20);
commentView.setBackgroundResource(R.drawable.comment_bg);
commentView.setTextColor(getResources().getColor(R.color.black));
commentBox.addView(commentView, commentViewParams);

TextView descriptionView = new TextView(this);
descriptionView.setText(json2.getString(KEY_COMMENT));
descriptionView.setPadding(20, 10, 20, 20);
descriptionView.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
descriptionView.setTextColor(getResources().getColor(R.color.black));
commentBox.addView(descriptionView);

RelativeLayout commentBoxButtons = new RelativeLayout(this);
RelativeLayout.LayoutParams commentBoxButtonsParam = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
commentBox.addView(commentBoxButtons, commentBoxButtonsParam);

Button btnTag1 = new Button(this);
RelativeLayout.LayoutParams btnTag1Param = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
btnTag1Param.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
btnTag1.setText("Go to " + json2.getString(KEY_PLATENUMBER));
btnTag1Param.setMargins(10, 10, 10, 10);
btnTag1.setBackgroundResource(R.drawable.dashboard_post);
btnTag1.setTextColor(getResources().getColor(R.color.white));
btnTag1.setTypeface(Typeface.DEFAULT_BOLD);
btnTag1.setPadding(8, 5, 8, 5);
btnTag1.setId(verify);
commentBoxButtons.addView(btnTag1, btnTag1Param);

Button btnTag2 = new Button(this);
RelativeLayout.LayoutParams btnTag2Param = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
btnTag2Param.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
btnTag2.setText("Go to " + json2.getString(KEY_USERNAME));
btnTag2Param.setMargins(10, 10, 10, 10);
btnTag2.setTypeface(Typeface.DEFAULT_BOLD);
btnTag2.setBackgroundResource(R.drawable.dashboard_post);
btnTag2.setTextColor(getResources().getColor(R.color.white));
btnTag2.setPadding(8, 5, 8, 5);
btnTag2.setId(verify2);
commentBoxButtons.addView(btnTag2, btnTag2Param);

verify2 = verify2 + 1;
verify = verify + 1;
offsetNumber = json2.getString(KEY_OFFSET_NUMBER);
commentCycle = commentCycle + 1;

}//end while
}//end if comment number is less than or equal to 15

//if comment number is greater than 15
if(numberOfComments2 > 15){
int commentCycle2 = 0;
while(commentCycle2 <= 15){
commentCycle2 = commentCycle2 + 1;
JSONObject json2 = CollectComments.collectComments(usernameforcomments, offsetNumber);

LinearLayout commentBox = new LinearLayout(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
commentBox.setBackgroundResource(R.drawable.comment_box_bg);
layoutParams.setMargins(0, 10, 0, 10);
commentBox.setPadding(0,0,0,10);
commentBox.setOrientation(LinearLayout.VERTICAL);
linear.addView(commentBox, layoutParams);

RelativeLayout commentBoxHeader = new RelativeLayout(this);
commentBoxHeader.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
commentBoxHeader.setBackgroundResource(R.drawable.comment_box_bg);
commentBoxHeader.setBackgroundResource(R.drawable.comment_box_header);
commentBox.addView(commentBoxHeader);

TextView usernameView = new TextView(this);
usernameView.setText("Posted by: " + json2.getString(KEY_USERNAME));
RelativeLayout.LayoutParams usernameViewParam = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
usernameViewParam.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
usernameView.setTextColor(getResources().getColor(R.color.white));
usernameView.setPadding(5, 5, 10, 5);
usernameView.setTypeface(Typeface.DEFAULT_BOLD);
commentBoxHeader.addView(usernameView, usernameViewParam);

TextView commentView = new TextView(this);
commentView.setText(json2.getString(KEY_COMMENT));
LinearLayout.LayoutParams commentViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
commentViewParams.setMargins(20, 10, 20, 20);
commentView.setBackgroundResource(R.drawable.comment_bg);
commentView.setTextColor(getResources().getColor(R.color.black));
commentBox.addView(commentView, commentViewParams);

TextView descriptionView = new TextView(this);
descriptionView.setText(json2.getString(KEY_COMMENT));
descriptionView.setPadding(20, 10, 20, 20);
descriptionView.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
descriptionView.setTextColor(getResources().getColor(R.color.black));
commentBox.addView(descriptionView);

RelativeLayout commentBoxButtons = new RelativeLayout(this);
RelativeLayout.LayoutParams commentBoxButtonsParam = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
commentBox.addView(commentBoxButtons, commentBoxButtonsParam);

Button btnTag1 = new Button(this);
RelativeLayout.LayoutParams btnTag1Param = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
btnTag1Param.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
btnTag1.setText("Go to " + json2.getString(KEY_PLATENUMBER));
btnTag1Param.setMargins(10, 10, 10, 10);
btnTag1.setBackgroundResource(R.drawable.dashboard_post);
btnTag1.setTextColor(getResources().getColor(R.color.white));
btnTag1.setTypeface(Typeface.DEFAULT_BOLD);
btnTag1.setPadding(8, 5, 8, 5);
btnTag1.setId(verify);
commentBoxButtons.addView(btnTag1, btnTag1Param);

Button btnTag2 = new Button(this);
RelativeLayout.LayoutParams btnTag2Param = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
btnTag2Param.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
btnTag2.setText("Go to " + json2.getString(KEY_USERNAME));
btnTag2Param.setMargins(10, 10, 10, 10);
btnTag2.setTypeface(Typeface.DEFAULT_BOLD);
btnTag2.setBackgroundResource(R.drawable.dashboard_post);
btnTag2.setTextColor(getResources().getColor(R.color.white));
btnTag2.setPadding(8, 5, 8, 5);
btnTag2.setId(verify2);
commentBoxButtons.addView(btnTag2, btnTag2Param);

verify2 = verify2 + 1;
verify = verify + 1;
offsetNumber = json2.getString(KEY_OFFSET_NUMBER);
commentCycle = commentCycle + 1;

}//end while cycle <= 15

db.resetOffsetTable();
db.addOffset(Integer.parseInt(offsetNumber));

}//end if comment number is greater than 15

}//end if key is == 1
else{
// Error in registration
registerErrorMsg.setText(json.getString(KEY_ERROR_MSG));
}//end else
}//end if
} //end try

catch (JSONException e) {
e.printStackTrace();
}//end catch

}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}

спросил(а) 2013-07-04T05:19:00+04:00 7 лет, 2 месяца назад
1
Решение
69

Какую ошибку вы получаете? Является ли ваш класс AsyncTask вне класса Activity?

Если да, как сказал Voicu, вы должны создать свой AsyncTask в качестве внутреннего класса в своей деятельности. После этого вы можете использовать метод findViewById(). Взгляните на следующий пример:

public class MyActivity extends Activity
{
//Some code

public class commentAsync extends AsyncTask<String, String, String>
{
//Hurray! Can use findViewById() here!
}

//Some more code
}

Если нет, я жду дополнительной информации.

ОБНОВИТЬ:

Отвечая на ваш первый комментарий, это работает для меня хорошо:

public class A extends Activity {

public class B
{

}

class C
{

}
}

Я не уверен, почему он не работает для вас, но, как я помню, у меня была аналогичная проблема...

ответил(а) 2013-07-04T05:35:00+04:00 7 лет, 2 месяца назад
41

AsyncTask не имеет метода findViewById. Проверьте ссылочную страницу, чтобы узнать, какие методы вы можете использовать. Класс Activity должен иметь это, поэтому, возможно, вы захотите создать AsyncTask внутри Activity или передать ему представление.

Если вы собираетесь создать внутренний класс AsyncTask, то вы можете:


registerErrorMsg = (TextView) YourActivity.this.findViewById(R.id.collectComment_error);

ответил(а) 2013-07-04T05:22:00+04:00 7 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема