Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android将字符串数组和字符串传递给asyncTask_Java_Android_Parameters_Android Asynctask - Fatal编程技术网

Java android将字符串数组和字符串传递给asyncTask

Java android将字符串数组和字符串传递给asyncTask,java,android,parameters,android-asynctask,Java,Android,Parameters,Android Asynctask,我想将字符串数组和字符串变量传递给AsyncTask类。我对android应用程序编程还不熟悉,所以这可能不是实现我目标的最有效的方式。无论如何,我有一个名为separate[]的字符串数组和String selected 在单独的[]中,我从EditText视图加载了值,在selected中,有一个来自微调器的值。现在我想在异步任务中使用这些。我的AsyncTask类现在如下所示: final class cyklus extends AsyncTask<String[], Void,

我想将字符串数组和字符串变量传递给AsyncTask类。我对android应用程序编程还不熟悉,所以这可能不是实现我目标的最有效的方式。无论如何,我有一个名为separate[]的字符串数组和String selected

在单独的[]中,我从EditText视图加载了值,在selected中,有一个来自微调器的值。现在我想在异步任务中使用这些。我的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;
}
 }
final类cyklus扩展异步任务{
字符串[]音调={“C”、“Cis”、“D”、“Dis”、“E”、“F”、“Fis”、“G”、“Gis”、“A”、“Ais”、“B”};
字符串[]结果;
@凌驾
受保护的字符串[]doInBackground(字符串[]…参数){
int l=params.length;//分隔符的长度[]
对于(int k=0;k==l;k++){//查找元素匹配的索引,将[k]分隔为音调[]
//输入位置
inti=Arrays.asList(tones.indexOf(params[k]);
//结果指标
int j=Integer.parseInt(选中);
int指数=i+j;
//结果
字符串res=音调[索引];
结果[k]=res;
}
返回结果;
}
}
完成此for循环后,我希望AsyncTask返回结果[]。总之,我想知道如何在AsyncTask类中使用“separate[]”和“selected”。多谢各位


编辑:还有一个子问题。我的for循环无法启动。为什么?谢谢。

像这样创建一个异步任务构造函数

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扩展异步任务
{
第一串;
字符串[]2;
公共废话(字符串一,字符串[]二)
{
这个1=1;
这个2=2;
}
onPreExe。。。。。
多恩巴克。。。。
onPostExe。。。。
}
来自活动

Blah b=new Blah(“abc”,新字符串[]{“a”、“b”、“c”};

b.execute(…);

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

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

我不知道从哪里选择了

// RESULT INDEX
int j =Integer.parseInt(selected);
但是您可以通过添加onPostExecute()来设置这样的结果

final类cyklus扩展异步任务{
字符串[]音调={“C”、“Cis”、“D”、“Dis”、“E”、“F”、“Fis”、“G”、“Gis”,
“A”、“Ais”、“B”};
字符串[]结果;
@凌驾
受保护的字符串[]doInBackground(字符串[]…参数){
int l=params.length;//分隔符的长度[]
对于(int k=0;k==l;k++){//查找
//元素以音调[]分隔[k]
//输入位置
inti=Arrays.asList(tones.indexOf(params[k]);
//结果指标
int j=Integer.parseInt(选中);
int指数=i+j;
//结果
字符串res=音调[索引];
结果[k]=res;
}
返回结果;
}
@凌驾
受保护的void onPostExecute(字符串[]结果)
{
super.onPostExecute(结果);
//将结果数组设置为您想要的对象
}
}

将方法更改为:全局定义

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);
}
公共类cyklus扩展异步任务{
进程对话;
@凌驾
受保护的void onPreExecute(){
dialog=新建进度对话框(上下文);
对话框.setTitle(“计算…”);
setMessage(“请稍候…”);
对话框。setUndeterminate(true);
dialog.show();
}
受保护的字符串[]doInBackground(字符串[]…正在传递){
字符串[]结果=新字符串[10];
字符串[]传递=传递[0];//获取传递数组
//一些计算。。。
返回结果;//返回结果
}
受保护的void onPostExecute(字符串[]结果){
dialog.dismise();
字符串最小值=result.get(0);
}

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

谢谢,但我认为我们彼此不了解:)。我不需要传入tones[]我需要传入一个字符串变量:string selected和string[]separate,其中在string selected中,有来自微调器和string[]的值separate,我的EditText中有一些值。选择的字符串在我的onCreate方法中声明。我如何做?@user2886091所以你想传递一个字符串值,好的,你想从AsyncTask返回什么?我想同时传递String[]separate和String selected。我想让我的AsyncTask返回String[]结果。创建一个带有两个参数的AsyncTask构造函数。查看下面的@ohntheripp3r Answer这是我要问的问题。选择的字符串在我的onCreate方法中声明,在这个变量中,有来自微调器的值。所以我需要传入选择的字符串和分开的字符串[]。你能帮助我吗?
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);
}