AsyncTask没有填充布局



我有一个id为content的简单的LinearLayout

我有另一个布局,一个相对(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()使http请求托管在我的计算机上的php文件,这个php返回一个json与几个对象从一个自定义类命名为Event。我将这些对象保存到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;
    }

尝试更改

protected void onPostExecute() {

protected void onPostExecute(Void result) {

史上最愚蠢的错误。

我的AsyncTask是这样的:class RetrieveEvents extends AsyncTask<String, String, String>{

所以我必须实现onPostExecute与重写像这样:protected void onPostExecute(String str) {

之前是:protected void onPostExecute() {

最新更新