我想将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”。谢谢。
编辑:还有一个问题。我的循环不会开始。为什么?谢谢。
答案 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
}
}