gpt4 book ai didi

java - ArrayIndexOutOfBound 异常

转载 作者:行者123 更新时间:2023-12-02 03:45:43 26 4
gpt4 key购买 nike

我正在尝试将 Google 任务与我的应用程序同步。为此,我创建了一个类,在其中创建了需要获取任务列表和创建列表等的所有方法。

现在我想测试一下这些方法是否有效。为此,我创建了一个扩展 AsyncTask 的类。

我必须在此任务中传递一些参数,就像在我有参数的方法中一样。就像 getTaskList(Strig listId) 中一样。要从任何列表中获取任务,我需要提供列表的 ID。

现在当我尝试在 AsyncTask 中传递参数时。在调用它时

result = gTaskSyncer.getTaskList(params[0].toString());

它在这里抛出一个ArrayIndexOutOfBoundException

测试异步任务

 public class TestAsyncTask extends AsyncTask<Object,Void,List<Task>>{

private com.google.api.services.tasks.Tasks mService = null;
private Exception mLastError = null;
private MainActivity activity;
private com.google.api.services.tasks.Tasks client = null;

public TestAsyncTask(GoogleAccountCredential credential, MainActivity activity) {
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
mService = new com.google.api.services.tasks.Tasks.Builder(
transport, jsonFactory, credential)
.setApplicationName("Google Tasks API Android Quickstart")
.build();
this.activity = activity;
}

protected List<Task> doInBackground(Object... params) {



GTaskSyncer gTaskSyncer = new GTaskSyncer(activity);

List<Task> result = new ArrayList<>();

try {

result = gTaskSyncer.getTaskList(params[0].toString());

} catch (IOException e) {

Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "No tasks.", Toast.LENGTH_SHORT).show();
}
});

}
return result;
}


@Override
protected void onPostExecute(List<Task> output) {
activity.mProgress.hide();
if (output == null || output.size() == 0) {
activity.mOutputText.setText("No results returned.");
} else {
activity.mOutputText.setText(TextUtils.join("\n", output));
}
}
}

GTaskSyncer

 public class GTaskSyncer
{

final MainActivity activity;
final com.google.api.services.tasks.Tasks mService;
private Exception mLastError = null;



GTaskSyncer(MainActivity activity) {
this.activity = activity;
mService = activity.mService;
}

public List<TaskList> getAllTaskList() throws IOException
{
List<TaskList> result = new ArrayList<TaskList>();

TaskLists taskLists = mService.tasklists().list().execute();

for (TaskList taskList : taskLists.getItems()) {

result.add(taskList);
}

return result;

}


public TaskList createList() throws IOException
{

TaskList taskList = new TaskList();

taskList = activity.mService.tasklists().insert(taskList).execute();

return taskList;
}

public Task createTask(String listId) throws IOException
{

Task task = new Task();

task = activity.mService.tasks().insert(listId, task).execute();

return task;
}

public Task getTask(String listId,String taskId) throws IOException
{

Task task = activity.mService.tasks().get(listId, taskId).execute();

return task;
}

public List<Task> getTaskList(String listId) throws IOException {


List<Task> result = new ArrayList<Task>();

List<Task> tasks = mService.tasks().list(listId).execute().getItems();

if (tasks != null) {

for (Task task : tasks) {

result.add(task);
}
} else {

Toast.makeText(activity, "No tasks.", Toast.LENGTH_SHORT).show();
}

return result;

}

}

另外我该如何测试这个?当我们调用方法时如何向方法提供listId?

最佳答案

当您在不带任何参数的情况下对AsyncTask 调用execute() 时,execute() 缺少的参数将在AsyncTask 的 中变成空(varargs) 数组 doInBackground() 方法。

如果您希望能够在 doInBackground() 中使用参数,那么您必须通过 execute() 传递一些参数。如果您想确保索引不会超出执行中传递的项目列表,请迭代 vararg arg 数组,而不是在不检查其长度的情况下直接对其进行索引。

关于java - ArrayIndexOutOfBound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36325697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com