【问题标题】:Returning an ArrayList in android AsyncTask class在android AsyncTask类中返回一个ArrayList
【发布时间】:2013-10-18 09:30:34
【问题描述】:

我有一个 android 片段,其中包含一个 android AsyncTask 类,实现如下

    protected class getGraph extends
        AsyncTask<GraphFragment, Void, GraphFragment> {
    @Override
    protected GraphFragment doInBackground(GraphFragment... params) {
        performance = getPerformance(sharename);
        return null;
    }

    protected void onPostExecute(GraphFragment Param) {

    }

}

现在我想将 ArrayList 的值性能返回给调用方法。我该如何实现?

【问题讨论】:

标签: android arraylist android-asynctask


【解决方案1】:

试试这个:

(将“String”替换为您的数据的任何本机变量类型)

protected class getGraph extends
    AsyncTask<GraphFragment, Void, List<String>> {

List<String> performance = new ArrayList<String>();

@Override
protected GraphFragment doInBackground(GraphFragment... params) {
    performance = getPerformance(sharename);
    return null;
}

protected void onPostExecute(List<String> Param) {

}

}

【讨论】:

    【解决方案2】:

    使用以下代码。

    public class calc_stanica extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> {
    ProgressDialog dialog;
    
        @Override
        protected void onPreExecute() {
            dialog = new ProgressDialog(baraj_mapa.this);
            dialog.setTitle("Calculating...");
            dialog.setMessage("Please wait...");
            dialog.setIndeterminate(true);
            dialog.show();
        }
    
        protected ArrayList<String> doInBackground(ArrayList<String>... passing) {
            ArrayList<String> result = new ArrayList<String>();
            ArrayList<String> passed = passing[0]; //get passed arraylist
    
            // Assign data to your Arralist from your method
             result = getData();
            //Some calculations...do your stuff here.
    
            return result; //return result arraylist
        }
    
        protected void onPostExecute(ArrayList<String> result) {
            dialog.dismiss();
           // Get your arraylist here.
        }
    

    【讨论】:

      【解决方案3】:

      采取这种方法

      protected class getGraph extends
          AsyncTask<GraphFragment, Void, ArrayList<YOUROBJECT> {
      
          @Override
          protected ArrayList<YOUROBJECT> doInBackground(GraphFragment... params) {
             performance = getPerformance(sharename);
             return performance;
          }
      
          public void onPostExecute( ArrayList<YOUROBJECT> Param) {
      
          }
      }
      

      在你的其他 Class/MainActivity 中这样调用它:

      private void getSomething(){
          new getGraph({
              @Override
              void onPostExecute(ArrayList<YOUROBJECT> Param){
                  //DO SOMETHING IN MAINACTIVITY
              }
          }).execute(); 
      }
      

      【讨论】:

      • 我已经尝试过了,现在在“受保护的 GraphFragment doInBackground()”中出现语法错误。错误是我应该更改方法的返回类型。如果我更改实现可以吗到这个“受保护的 ArrayList doInBackground(GraphFragment...params)”?
      • 我如何获取返回值?我正在从另一个方法调用该类。
      【解决方案4】:

      这样做..

      protected class getGraph extends
          AsyncTask<GraphFragment, Void, ArrayList<String> {
      
      
          @Override
          protected GraphFragment doInBackground(GraphFragment... params) {
             performance = getPerformance(sharename);
             ArrayList<String> DATA=new ArrayList<String>();
             /*
             do the process and assign result in DATA
             */
             return DATA;
          }
      
          protected void onPostExecute( ArrayList<String> Param) {
           // Get your arraylist here.
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        相关资源
        最近更新 更多