0

我正在尝试将数组列表传递给 Asyctask 中的其他函数,但它正在为空。

编写以下代码来读取数组列表

@Override           
protected ArrayList<String> doInBackground(ArrayList<String>... params) {
            // TODO Auto-generated method stub
            switch (type) {
            case MZIP:      
                fileManager.createZipFolderForMulti(params[0]);             
                return null;
            }
            return null;
        }

编写以下代码以将数组列表传递给 AsyncTask

private void zipMiltiple(ArrayList<String> multiSelectData2) {
        // TODO Auto-generated method stub
        new Back(MZIP).execute(multiSelectData2);
        Log.d("JWP", "METHOD :"+ multiSelectData2);
    }

代码有问题吗?

4

2 回答 2

0

我正在尝试将数组列表传递给 Asyctask 中的另一个函数,但我得到的数组列表为空..

您需要检查是否在此行:

private void zipMiltiple(ArrayList<String> multiSelectData2)

multiSelectData2变量已正确实例化,即

if (multiSelectData2 != null) {
   new Back(MZIP).execute(multiSelectData2);
   Log.d("JWP", "METHOD :"+ multiSelectData2);
}
else {
   // ArrayList is NULL
}

您需要确保您的 ArrayList 不是NULL. 您正在正确传递 ArrayList 但可能您正在传递未实例化的 ArrayList。

如果它仍然无法正常工作,则问题出在其他地方,您应该在此处添加您的 logcat。


值得一提的是,还有更多可能的方法:

  • 通过ArrayList构造函数传递
  • 从此AsyncTask实现Activity类的内部类,您将可以直接访问Activity中的变量->
于 2013-05-18T07:32:27.423 回答
0

最好的方法是使用内部类:

  • 把你的函数放在内部类中。

  • 实施doInBackground

  • 从调用你的函数doInBackground

    包 com.stack.question;

    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.Toast;
    
    import android.util.Log;
    import android.widget.RatingBar;
    import android.widget.RatingBar.OnRatingBarChangeListener;
    
    public class StackActivity extends Activity {
    
        RatingBar ratingBar;
        float nowValue;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            new yourclass().execute("99");
        }
    
        class yourclass extends AsyncTask<String, Integer, ArrayList<String>> {
    
            @Override
            protected void onPostExecute(ArrayList<String> result) {
                super.onPostExecute(result);
                yourfunction(result);
                            zipMiltiple(result);
            }
    
                    private void zipMiltiple(ArrayList<String> multiSelectData2) {
            // TODO Auto-generated method stub
            new Back(MZIP).execute(multiSelectData2);
            Log.d("JWP", "METHOD :"+ multiSelectData2);
        }
    
            private void yourfunction(ArrayList<String> result) {
                for (int i = 0; i < result.size(); i++)
                    Toast.makeText(StackActivity.this, result.get(i),
                            Toast.LENGTH_LONG).show();
            }
    
            @Override
            protected ArrayList<String> doInBackground(String... params) {
                ArrayList<String> arrayList = new ArrayList<String>();
                arrayList.add("st1");
                arrayList.add("st2");
                            // Here put your code
                return arrayList;
            }
    
        }
    }
    

这是一个工作示例,我还将您的代码包含在其中

于 2013-05-18T07:42:40.993 回答