【问题标题】:Passing string values from asynctask to arraylist将字符串值从 asynctask 传递到 arraylist
【发布时间】:2016-01-02 12:55:54
【问题描述】:

目前,我正在寻找一种将多个 private decalared 字符串值(fac_naam、fac_straat、fac_post 等)传递给数组列表的方法。 数组列表是由 SetStandardGroups 方法创建的,并且来自 asynctask 的 collected values 应传递给 child_2 值。 现在 child_2 值始终为空,因为它们是新创建的。 有没有办法做到这一点?

谢谢你。

拨打电话:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.tab_fragment_1, container, false);

    // get the listview
    ExpandList = (ExpandableListView) rootView.findViewById(R.id.expListView);

    // execute AsyncTask
    new FetchWebsiteData().execute();

    // preparing list data
    ExpListItems = SetStandardGroups();

    ExpAdapter = new ExpandableListAdapter(this.getActivity(), ExpListItems);

    // setting list adapter
    ExpandList.setAdapter(ExpAdapter);
    return rootView;
}

方法集标准组:

private ArrayList<Group> SetStandardGroups() {

    String headers[] = {"Factuurgegevens", "Contactgegevens", "Betalingsgegevens",
            "MijnZiggo Mobiel account", "Wachtwoord"};

    String child_1[] = {"Naam", "Straat en huisnummer", "Postcode en woonplaats", "Telefoonummer",
            "E-mail", "Rekeningnummer", "Naam rekeninghouder", "Gebruikersnaam", "Wachtwoord"};

    String child_2[] = {fac_naam, fac_straat, fac_post, con_tel,
            con_email, betaal_reknr, betaal_houd, zig_gebruiker, zig_wacht};

    ArrayList<Group> list = new ArrayList<Group>();

    ArrayList<Child> ch_list; 
    }
    return list;
}

正在设置值的 AsyncTask:

private class FetchWebsiteData extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... result) {
        InputStream is = null;
        try {
            is = MainActivity.mContext.getAssets().open("Mobiel.html");

            Document doc = Jsoup.parse(is, "UTF-8", "http://example.com/");
            // Get the html document title
            Elements els = doc.select("span[class=item-value pull-right]");
            // get the values and set them
            if (els.size() > 0) {
                fac_naam = els.get(0).text();
                fac_straat = els.get(1).text();
                fac_post = els.get(2).text();
                con_tel = els.get(3).text();
                con_email = els.get(4).text();
                betaal_reknr = els.get(5).text();
                betaal_houd = els.get(6).text();
                zig_gebruiker = els.get(7).text();
                zig_wacht = els.get(8).text();
            }
            else // do something

        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

   }
}

【问题讨论】:

    标签: android arraylist android-asynctask


    【解决方案1】:

    您遇到了并发问题。当你这样做时:

    // execute AsyncTask
    new FetchWebsiteData().execute();
    
    // preparing list data
    ExpListItems = SetStandardGroups();
    

    在调用 SetStandardGroups() 之前,AsyncTask 可能尚未完成执行,因此变量仍然为空。您需要对其进行更改,以便在 AsyncTask 完成后调用适配器代码。我会做一个新方法,比如:

    private void setupAdapter() {
    
        // preparing list data
        ExpListItems = SetStandardGroups();
    
        ExpAdapter = new ExpandableListAdapter(this.getActivity(), ExpListItems);
    
        // setting list adapter
        ExpandList.setAdapter(ExpAdapter);
    }
    

    然后在 AsyncTask 的 onPostExecute() 方法中调用新方法:

    @Override
    protected void onPostExecute(Void result) {
    
        setupAdapter();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多