0

私はLinearLayoutid を持つ単純なものを持ってい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;

    }
4

2 に答える 2

1

変更してみる

protected void onPostExecute() {

protected void onPostExecute(Void result) {
于 2013-04-29T22:11:00.103 に答える
0

これまでで最も愚かな間違い。

私の AsyncTask は次のようなものです: class RetrieveEvents extends AsyncTask<String, String, String>{

したがって、次のようなオーバーライドで onPostExecute を実装する必要がありました。 protected void onPostExecute(String str) {

以前は次のとおりでした。 protected void onPostExecute() {

于 2013-04-29T22:10:29.890 に答える