我有一个连接到数据库并返回结果的json函数。它执行此操作大约15次或数据库中有多少条评论。 json函数在while循环中,并重复自身,直到从数据库中获取所有注释或直到它达到15条注释。问题是当应用程序加载应用程序的onCreate部分期间执行的注释时。我想要加载应用程序,然后在后面加载json函数。我知道我可以用asynctask做到这一点,但我不熟悉它们。所以我希望有人能告诉我如何将这些代码放入asynctask。
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);
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);
verify2 = verify2 + 1;
offsetNumber = json2.getString(KEY_OFFSET_NUMBER);
commentCycle = commentCycle + 1;
}//end while
}//end if comment number is less than or equal to 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
所有这些代码都有效,但我希望它在后台运行而不是在应用程序中创建一些,请尝试将其放入asynctask或至少帮助我了解如何执行此操作。
答案 0 :(得分:0)
您应该将while循环放在新的Thread或Async Task中。以下是如何运作
public class JsonWork extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
//your while loop goes here
}
}
在当前代码中的while循环之前,您应该调用new JsonWork().execute()
。这样它就可以在新的AsyncTask线程中执行while循环。