有以下代码
mSubmitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(mAnswerEditText.getText())
|| TextUtils.isEmpty(mEmailEditText.getText()))
Toast.makeText(getContext(),
"Заполните поля ответа и email", Toast.LENGTH_LONG).show();
else if (!isValidEmail(mEmailEditText.getText())) {
Toast.makeText(getContext(),
"Укажите правильный email", Toast.LENGTH_LONG).show();
} else {
String[] strings = {
mAnswerEditText.getText().toString(),
mEmailEditText.getText().toString(),
mAd.getEmail()};
new CreateAdTask().execute(strings);
Toast.makeText(getContext(),
"Сообщение отправлено!", Toast.LENGTH_LONG).show();
getActivity().finish();
}
}
});
private class CreateAdTask extends AsyncTask<String[], Void, Void> {
@Override
protected Void doInBackground(String[]... params) {
ServerHelper.getInstance().sendAnswer(
params[0].toString(),
params[1].toString(),
params[2].toString());
return null;
}
}
错误日志
08-24 09:08:11.029 14188-14259/com.likhanov.adservice E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
Process: com.likhanov.adservice, PID: 14188
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.likhanov.adservice.AdFragment$CreateAdTask.doInBackground(AdFragment.java:96)
at com.likhanov.adservice.AdFragment$CreateAdTask.doInBackground(AdFragment.java:91)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
第 96 行是 params[0].toString()。我无法弄清楚为什么此时我会溢出数组。显然有必要以不同的方式传递参数,如何做到这一点?
该表示法
String[]... params意味着您可以将不定数量的参数传递给该方法。并且该变量params将包含这些类型参数的数组String[]。也就是说,要访问以您拥有的方式传递的参数,条目应该是这样的:
或者您可以将方法签名更改为
doInBackground(String... params)并将数据传递给它,如下所示:并按照您现在的方式获取它们。