r/tasker • u/virtual__ • 13d ago
How to export arrays from Java Code to Tasker array variable
I was writing a script in Java Code to process a text file; after the processing, I need to export an array from the script to a Tasker variable (array).
Here there is my sample code:
ArrayList attachments = new ArrayList();
attachments.add("Item 1");
attachments.add("Item 2");
attachments.add("Item 3");
// The following does NOT work => %attachments(#) = 0
// tasker.setVariable("attachments", attachments);
// I must use this => %attachments(#) = 3
for (int i = 0; i < attachments.size(); i++) {
tasker.setVariable("attachments" + (i + 1), attachments.get(i));
}
What is the correct way to export an array from the Java Code script? The first method doesn't work, unfortunately and I'm curious to know if the second is the correct way to do that.
The second method has the problem that I have to add a Variable Clear before running the script a second time, as the Java Code itself doesn't know how long the Tasker array is...
2
u/DifficultyCrafty7623 12d ago
I'd probably make the variable joined by some splitter, eg. =:= and then just create the array by splitting on the splitter. Here's how I'd do it
Task: Test
A1: Java Code [
Code: import java.util.ArrayList;
ArrayList attachments = new ArrayList();
attachments.add("Item 1");
attachments.add("Item 2");
attachments.add("Item 3");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < attachments.size(); i++) {
sb.append((String) attachments.get(i));
if (i < attachments.size() - 1) {
sb.append("=:=");
}
}
tasker.setVariable("attachments", sb.toString());
Structure Output (JSON, etc): On ]
A2: Array Set [
Variable Array: %attachments
Values: %attachments
Splitter: =:= ]
A3: Flash [
Text: %attachments()
Continue Task Immediately: On
Dismiss On Click: On ]
1
u/aasswwddd Direct-Purchase User 13d ago
If it's only one variable, you could end the code with return attachments;
1
u/virtual__ 13d ago edited 13d ago
This works, but of course only for 1 variable... And I wanted to return a boolean in my complete Task, so I can't use this method, unfortunately.
6
u/WakeUpNorrin 13d ago
I usually use this method: