Azlan wrote,
I’m try to access Ubidot server through my ubidots account for my variable(battery level) but what received were bunch of string which I got no idea what it is.
Below is the android code snippet:
public class ApiUbidots extends AsyncTask<Integer, Void, Value[]> {
private final String API_KEY = "xxxxxxxx";
private final String VARIABLE_ID = "57047de57625420b17c72ad1";
@Override
protected Value[] doInBackground(Integer... params) {
ApiClient apiClient = new ApiClient(API_KEY);
Variable batteryLevel = apiClient.getVariable(VARIABLE_ID);
Value[] variableValues = batteryLevel.getValues();
return variableValues;
}
@Override
protected void onProgressUpdate(Void... params) {
mBatteryLevel.setText("Waiting for the data");
}
@Override
protected void onPostExecute(Value[] variableValues) {
// Update your views here
mBatteryLevel.setText(variableValues + "%");
}
}
and the sample result:
[Lcom.ubidots.Value;@123da9c2%
Please advise
Rgds,
Azlan
Hi Azlan,
You’re getting that String [Lcom.ubidots.Value;@123da9c2%
because you’re actually printing the Array object not the values contained on it. The Java toString() method for arrays prints the class name (i.e. com.ubidots.Value) and a HashCode (i.e. 123da9c2).
As you may want to print the last value, you could do this in your onPostExecute()
method.
@Override
protected void onPostExecute(Value[] variableValues) {
// Update your views here
mBatteryLevel.setText(variableValues[0].getValue() + "%");
}
Notice the [0] after variableValues, this is how you access an specific condition in your array.
Hope this help you
Regards
i am working on the same stuff… i actually was able to reach till mBatteryLevel.setText(variableValues[0]); but i was getting error… so i just wanted to ask why we are supposed to concatenate “%” with value as it removes the error.
Nice question @shahzadb13,
When you concatenate a Double value (variablesValues[0]) with a String ("%"), Java will create a new String object with those variables concatenated. In the case that you doesn’t concatenate with “%”, you’re sending a Double value alone to the setText() method, and that method doesn’t receive a Double but a String.
You can fix that by sending setText() the value converted to String, that is:
mBatteryLevel.setText(Double.toString(variablesValues[0].getValue()))
Important: I’ve edited both answers and added the .getValue() method in the variableValues[0] object.