【问题标题】:Unable to pass String from Asynctask to Fragment无法将字符串从 Asynctask 传递到 Fragment
【发布时间】:2016-07-29 12:04:20
【问题描述】:

第一次使用片段。

试图将字符串值从onPostCreate 传递给片段。

public class FillCust extends AsyncTask<String, String, List<Map<String, String>>> {
    String z = "" ;

    @Override
    protected void onPostExecute(List<Map<String, String>> r) {
        super.onPostExecute(r);

        custName = String.valueOf(CustData.get(0).get("A"));
        contactPerson = String.valueOf(CustData.get(0).get("B"));
        telNo = String.valueOf(CustData.get(0).get("C"));
        assignedBranch = String.valueOf(CustData.get(0).get("D"));

    }

    @Override
    protected List<Map<String, String>> doInBackground(String... params) {

        try {
            Connection con = connectionClass.CONN();
            if (con == null) {
                z = "Error in connection with SQL server";
            } else {
                String query = "select * from tblCustomer_Master where Customer_ID ='" + CustID + "'";
                PreparedStatement ps = con.prepareStatement(query);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    Map<String, String> datanum = new HashMap<String, String>();
                    datanum.put("A", rs.getString("Company_Name"));
                    datanum.put("B", rs.getString("Contact_Person"));
                    datanum.put("C", rs.getString("Tel_No"));
                    datanum.put("D", rs.getString("Assigned_Branch"));
                    CustData.add(datanum);

                }
                z = "Success";
            }
        } catch (Exception ex) {
            z = "Error retrieving data from table";

        }
        return CustData;
    }
}

我的界面

public String getCompanyname(String result) {
   return custName ;
}

【问题讨论】:

  • 你没有从doInBackground返回任何东西。
  • 是的,我正在从 doInbackground 返回列表“CustData”!如何使用列表通过接口传递?
  • 哦,对不起,我不知何故没有注意到它。好吧,我个人喜欢使用EventBus 从onPostExecute 发布自定义事件,因为它是异步的,您可以在获取新数据时更新需要更新的 UI。
  • 我可以在这里使用 EventBus 概念吗?
  • 很简单,创建您的自定义事件,它可以保存您想要的任何数据,例如 List&lt;Map&lt;String, String&gt;&gt; 或 whatever 适合您,然后从 onPostExecute 发布事件并在您的片段中聆听它。

标签: android android-fragments android-asynctask


【解决方案1】:

在你的fragment中实现你的interface,通过AsyncTask constructor,在onPostExecute中调用接口方法。

【讨论】:

    【解决方案2】:

    首先创建这样的界面

        public interface AsyncInterface {
    
                public abstract void companyName(String result);
    }
    

    在你的片段上实现这个

    然后像这样从 onPostExecute() 调用这个接口方法。

    fragment.companyName(result);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2012-06-13
      相关资源
      最近更新 更多