Reputation: 419
I'm new to API data fetching and I have used this ThingSpeak API library for Android. to get JSON data from a Thingspeak URL to my Java Android application.
The JSON data looks like this
{"channel":
{"id":1382053,"name":"WeightScale","latitude":"0.0","longitude":"0.0","field1":"weight",
"created_at":"2021-05-06T05:18:16Z","updated_at":"2021-05-06T05:18:16Z","last_entry_id":207},
"feeds":
[
{"created_at":"2021-05-07T16:26:06Z","entry_id":206,"field1":"0.00000"},
{"created_at":"2021-05-07T16:26:22Z","entry_id":207,"field1":"2.00000"}
]
}
and my MainActivity contains
package com.dommy.qrcodelib;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.macroyau.thingspeakandroid.ThingSpeakChannel;
import com.macroyau.thingspeakandroid.model.ChannelFeed;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private ThingSpeakChannel tsChannel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fetchData();
}
public void fetchData() {
tsChannel = new ThingSpeakChannel(1382053,"[MyAPIKey]");
// Set listener for Channel feed update events
tsChannel.setChannelFeedUpdateListener(new ThingSpeakChannel.ChannelFeedUpdateListener() {
@Override
public void onChannelFeedUpdated(long channelId, String channelName, ChannelFeed channelFeed) {
long entry = channelFeed.getChannel().getLastEntryId();
Log.e(null,""+ entry);
Date lastUpdate = channelFeed.getChannel().getUpdatedAt();
Toast.makeText(MainActivity.this, lastUpdate.toString(), Toast.LENGTH_LONG).show();
//unable to get last data value from here onwards (instead prints lots of entries)
String d = channelFeed.getFeeds().toString();
Log.e(null,""+ d);
}
});
tsChannel.loadChannelFeed();
}
}
I need to print a log with the last field1 value that was received. (eg: 2.00000 needs to be printed)
The current code only prints an output similar to:
E/dommy.qrcodeli: [com.macroyau.thingspeakandroid.model.Feed@90c638d, com.macroyau.thingspeakandroid.model.Feed@ca98942, com.macroyau.thingspeakandroid.model.Feed@70dbd53, com.macroyau.thingspeakandroid.model.Feed@1bb1690, com.macroyau.thingspeakandroid.model.Feed@e8ab89, com.macroyau.thingspeakandroid.model.Feed@c4af78e, com.macroyau.thingspeakandroid.model.Feed@92cdbaf, com.macroyau.thingspeakandroid.model.Feed@b630bbc, com.macroyau.thingspeakandroid.model.Feed@6277745, com.macroyau.thingspeakandroid.model.Feed@982fe9a, com.macroyau.thingspeakandroid.model.Feed@b7583cb, com.macroyau.thingspeakandroid.model.Feed@93327a8, com.macroyau.thingspeakandroid.model.Feed@4cd42c1, com.macroyau.thingspeakandroid.model.Feed@8026a66, com.macroyau.thingspeakandroid.model.Feed@65691a7, com.macroyau.thingspeakandroid.model.Feed@1671654, com.macroyau.thingspeakandroid.model.Feed@aaa49fd, com.macroyau.thingspeakandroid.model.Feed@3bac6f2, com.macroyau.thingspeakandroid.model.Feed@50a143, com.macroyau.thingspeakandroid.model.Feed@4943c0, com.macroyau.thingspeakandroid.model.Feed@85688f9, com.macroyau.thingspeakandroid.model.Feed@42a603e, com.macroyau.thingspeakandroid.model.Feed@d520e9f, com.macroyau.thingspeakandroid.model.Feed@a5edbec, com.macroyau.thingspeakandroid.model.Feed@5edbbb5, com.macroyau.thingspeakandroid.model.Feed@868424a, com.macroyau.thingspeakandroid.model.Feed@7d2f5bb, com.macroyau.thingspeakandroid.model.Feed@553cad8, com.macroyau.thingspeakandroid.model.Feed@78b5e31, com.macroyau.thingspeakandroid.model.Feed@7f03916, com.macroyau.thingspeakandroid.model.Feed@fb13297, com.macroyau.thingspeakandroid.model.Feed@3a6bc84, com.macroyau.thingspeakandroid.model.Feed@d86ac6d, com.macroyau.thingspeakandroid.model.Feed@42ed0a2, com.macroyau.thingspeakandroid.model.Feed@acc6133, com.macroyau.thingspeakandroid.model.Feed@f151cf0, com.macroyau.thingspeakandroid.model.Feed@c6ea269, com.macroyau.thingspeakandroid.model.Feed@6cd54ee, com.macroyau.thingspeakandroid.model.Feed@361dd8f, com.macroyau.thingspeakandroid.model.Feed@dc7181c, com.macroyau.thingspeakandroid.model.Feed@8c5fc25, com.macroyau.thingspeakandroid.model.Feed@8bdd1fa, com.macroyau.thingspeakandroid.model.Feed@28c3ab, com.macroyau.thingspeakandroid.model.Feed@e3b9a08, com.macroyau.thingspeakandroid.model.Feed@27f35a1, com.macroyau.thingspeakandroid.model.Feed@e0713c6, com.macroyau.thingspeakandroid.model.Feed@22def87, com.macroyau.thingspeakandroid.model.Feed@5f44eb4, com.macroyau.thingspeakandroid.model.Feed@c388add, com.macroyau.thingspeakandroid.model.Feed@250a652, com.macroyau.thingspeakandroid.model.Feed@46ffd23, com.macroyau.thingspeakandroid.model.Feed@ee1a220, com.macroyau.thingspeakandroid.model.Feed@a37f7d9, com.macroyau.thingspeakandroid.model.Feed@22ed59e, com.macroyau.thingspeakandroid.model.Feed@93b487f, com.macroyau.thingspeakandroid.model.Feed@f8ec04c, com.macroyau.thingspeakandroid.model.Feed@5273895, com.macroyau.thingspeakandroid.model.Feed@d2eadaa, com.macroyau.thingspeakandroid.model.Feed@145ed9b, com.macroyau.thingspeakandroid.model.Feed@a0d9538, com.macroyau.thingspeakandroid.model.Feed@c8fc911, com.macroyau.thingspeakandroid.model.Feed@ca1fa76, com.macroyau.thingspeakandroid.model.Feed@88bc877, com.macroyau.thingspeakandroid.model.Feed@da2cce4, com.macroyau.thingspeakandroid.model.Feed@516e54d, com.macroyau.thingspeakandroid.model.Feed@b2b4802, com.macroyau.thingspeakandroid.model.Feed@4ea7513, com.macroyau.thingspeakandroid.model.Feed@731d350, com.macroyau.thingspeakandroid.model.Feed@e798949, com.macroyau.thingspeakandroid.model.Feed@909e24e, com.macroyau.thingspeakandroid.model.Feed@27d4f6f, com.macroyau.thingspeakandroid.model.Feed@c68d47c, com.macroyau.thingspeakandroid.model.Feed@d487105, com.macroyau.thingspeakandroid.model.Feed@925d55a, com.macroyau.thingspeakandroid.model.Feed@9b9738b, com.macroyau.thingspeakandroid.model.Feed@dacbc68, com.macroyau.thingspeakandroid.model.Feed@4641881, com.macroyau.thingspeakandroid.model.Feed@2dbed26, com.macroyau.thingspeakandroid.model.Feed@b49bd67, com.macroyau.thingspeakan
D/CompatibilityChangeReporter: Compat change id reported: 147798919; UID 10000; state: DISABLED
E/dommy.qrcodeli: Invalid ID 0x00000000.
Upvotes: 0
Views: 78
Reputation: 977
Problem: Here you are getting a string representation of your object means every class in java is a child of the Object class either directly or indirectly. Object class contains toString() method. We can use the toString() method to get a string representation of an object. Whenever we try to print the Object reference then internally toString() method is invoked.
Solution: In your Pojo or Model class you have to override the toString, hashCode and equals method to get the real value of your objects.
Example:-
public class Person {
private String name;
private int age = 0;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (name != null ? !name.equals(person.name) : person.name != null) return false;
if (age != 0 ? age != person.age : person.age != 0) return false;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
Upvotes: 1
Reputation: 1338
Your code represents a JSON Array and not a JSON Object.
getFeeds()
must return a list of Feed
objects. Find the last Feed
object based on the lastEntryId
and which gives you a feedObject
. Now you can print the feedObject.field1
value.
This is a pseudo-code in Kotlin for help.
val feedList = channelFeed.getFeeds()
val feed = feedList.find { it.entryId == lastEntryId }
Log.d("TAG", "Value is " + feed.field1)
Upvotes: 1