android将String数组和String传递给asyncTask

时间:2014-01-01 11:29:07

标签: java android parameters android-asynctask

我想将String数组和String变量传递给我的AsyncTask类。我是编程Android应用程序的新手,所以这可能不是实现我的目标的最有效方法。无论如何,我有一个名为separate []和String的String数组被选中。

在单独的[]中,我已经从EditText View和selected中加载了值,我的微调器中有一个值。现在我想在我的AsyncTask中使用它们。我的AsyncTask类看起来像这样:

 final class cyklus extends AsyncTask<String[], Void, String[]>{
String[] tones = {"C","Cis","D","Dis","E","F","Fis","G","Gis","A","Ais","B"};
String[] result;

@Override
protected String[] doInBackground(String[]... params) {

    int l =params.length;  //length of separate[]

    for(int k=0; k==l; k++){   // finding indexes of matches of elements separate[k] in tones[] 

        // INPUT POSITION
                int i= Arrays.asList(tones).indexOf(params[k]);


        // RESULT INDEX
                int j =Integer.parseInt(selected);
                int index = i+j;    


        // RESULT
                String res=tones[index];
                result[k]=res;                          

}

    return result;
}
 }

完成for循环之后,我希望我的AsyncTask返回result []。总结一下,我想知道如何在AsyncTask类中使用“separate []”和“selected”。谢谢。

编辑:还有一个问题。我的循环不会开始。为什么?谢谢。

4 个答案:

答案 0 :(得分:6)

将您的方法更改为:全局定义

String[] tones = {"C","Cis","D","Dis","E","F","Fis","G","Gis","A","Ais","B"};

现在,请调用您的异步任务,如下所示:

new cyklus().execute(tones);

现在,更改您的异步任务实现

public class cyklus extends AsyncTask<String[], Void, String[]> {
ProgressDialog dialog;

@Override
protected void onPreExecute() {
    dialog = new ProgressDialog(context);
    dialog.setTitle("Calculating...");
    dialog.setMessage("Please wait...");
    dialog.setIndeterminate(true);
    dialog.show();
}

protected String[] doInBackground(String[]... passing) {
    String[] result = new String[10];
    String[] passed = passing[0]; //get passed array

    //Some calculations...

    return result; //return result
}

protected void onPostExecute(String[] result) {
    dialog.dismiss();
    String minim = result.get(0);
}

这是您实现AsyncTask的方法。希望这会对你有所帮助。

答案 1 :(得分:1)

像这样创建一个asynctask构造函数

public class Blah extends AsyncTask<... , ... , ...>
{
     String one;
     String[] two;
     public Blah(String one, String[] two)
     {
         this.one = one;
         this.two = two;
     }
     onPreExe.....
     doInBack....
     onPostExe....
 }

来自活动

Blah b = new Blah("abc", new String[]{"a", "b","c"}; b.execute(...);

答案 2 :(得分:1)

编写构造函数并使用它传递值。

    public cyklus(Context context,String[] tones){
    this.context = context;
    this.tones = tones;
}

答案 3 :(得分:0)

我不知道选定值的来源

// RESULT INDEX
int j =Integer.parseInt(selected);

但是你可以通过添加onPostExecute()

来设置这样的结果
    final class cyklus extends AsyncTask<String[], Void, String[]> {
    String[] tones = { "C", "Cis", "D", "Dis", "E", "F", "Fis", "G", "Gis",
            "A", "Ais", "B" };
    String[] result;

    @Override
    protected String[] doInBackground(String[]... params) {

        int l = params.length; // length of separate[]

        for (int k = 0; k == l; k++) { // finding indexes of matches of
                                        // elements separate[k] in tones[]

            // INPUT POSITION
            int i = Arrays.asList(tones).indexOf(params[k]);

            // RESULT INDEX
            int j = Integer.parseInt(selected);
            int index = i + j;

            // RESULT
            String res = tones[index];
            result[k] = res;

        }

        return result;
    }

    @Override
    protected void onPostExecute(String[] result) 
    {
        super.onPostExecute(result);
        //Set the result array to what ever object u want to
    }
}