我有一个标识为LinearLayout
的简单content
。
我有另一个布局,一个亲戚(id = entry
)。根据php文件的响应,这个亲戚会被夸大几次。
问题是如果我手动夸大entry
布局4次,它就能正常工作。这是使用的代码:
LinearLayout content = (LinearLayout) Events.this.findViewById(R.id.content);
for (int i=0; i<4;i++){
RelativeLayout event = (RelativeLayout) mInflater.inflate(R.layout.event_entry, null);
content.addView(event);
}
但现在,问题是我在AsyncTask上执行此操作时无法实现此目的。
AsyncTask本身正常工作。
PreExecute()
设置为什么都不做。OnBackground()
向我的计算机上托管的php文件发出一个http请求,这个php正在返回一个带有来自名为Event
的自定义类的多个对象的json。我将这些对象保存到HashMap中。 Hashmap已正确填充(Debug:{1=Event@40dd9708, 0=Event@40dd9628}
)。如您所见,HashMap上有两个Event对象。 OnPostExecute()
包含以下代码:
protected void onPostExecute() {
Log.d("debugging","Omplo llistat amb"+Events.this.events.toString());
LinearLayout content = (LinearLayout) Events.this.findViewById(R.id.content);
for (int i=0; i<Events.this.events.size()+1;i++){
RelativeLayout event = (RelativeLayout) mInflater.inflate(R.layout.event_entry, null);
Event eventDesat = Events.this.events.get(""+i);
TextView title = (TextView) event.findViewById(R.id.title);
title.setText(eventDesat.getTitle());
content.addView(event);
}
}
但它没有填补任何东西。
尝试event.getParent().invalidate();
之类的内容,但结果相同。
你明白发生了什么吗? 我没有看到第一个示例代码和下面的真实代码之间有任何区别。请注意,循环循环两次,应该如此。
似乎永远不会触发onPostExecute:
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
SharedPreferences settings = getSharedPreferences("login", MODE_PRIVATE);
int loggedin = settings.getInt("logged", 0);
if (loggedin == 0){
Events.this.finish();
}
String username = settings.getString("username", "");
String password = settings.getString("password", "");
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(Events.this.urlWebRetrieveEvents, "POST", params);
// Check your log cat for JSON reponse
if (json!= null){
//Log.d("Debugging", json.toString());
try {
int success = json.getInt("success");
if (success == 1){
//this is filling hashmap correctly
Log.d("debugging","AQUI VAAA"+Events.this.events.toString());
}
} catch (Exception e){
//algo malo. no internet? perdudes les dades? Crec que mai hauriem d'entrar aquí.
}
}
return null;
}
答案 0 :(得分:1)
尝试更改
protected void onPostExecute() {
到
protected void onPostExecute(Void result) {
答案 1 :(得分:0)
愚蠢的错误。
我的AsyncTask是这样的:
class RetrieveEvents extends AsyncTask<String, String, String>{
所以我必须使用像这样的Override实现onPostExecute:
protected void onPostExecute(String str) {
以前是:
protected void onPostExecute() {