私はLinearLayout
id を持つ単純なものを持ってい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は、という名前のカスタムクラスからいくつかのオブジェクトを含むjsonを返していますEvent
。これらのオブジェクトを HashMap に保存します。ハッシュマップは正しく埋められています (デバッグ:{1=Event@40dd9708, 0=Event@40dd9628}
)。ご覧のとおり、Event の 2 つのオブジェクトが HashMap 上にあります。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();
ましたが、同じ結果が得られました。
何が起こっているか分かりますか?最初のサンプル コードと以下の実際のコードに違いはありません。ループが 2 回ループしていることに注意してください。
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;
}