我是Android的新手,我正在尝试创建一个应用程序,使用在后台服务上运行的socket.io,但我收到错误,无法在互联网上找到解决方案或我不明白这个问题因为我缺乏android(和对象)的经验。
mSocket.on("start tracking", new Emitter.Listener() {
@Override
public void call(final Object... args) {
timer.scheduleAtFixedRate(new TimerTask() {
long t0 = System.currentTimeMillis();
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
String id;
try {
id = data.getString("id");
} catch (JSONException e) {
return;
}
//cancel();
if (System.currentTimeMillis() - t0 > 60 * 1000) {
cancel();
} else {
//do my stuff
String deviceId = Settings.System.getString(getContentResolver(),
Settings.System.ANDROID_ID);
if(id == deviceId){
mSocket.emit("emmitting location", deviceId, latitude, longitude);
}
}
}
}, 0, 1000);
}
});
修改 我没有意识到我没有通过我的服务器传递JSON对象。感谢@cybersam清理一切并耐心地解释整个情况。 :)
答案 0 :(得分:1)
#include <stdio.h>
int main()
{
int A[2][3];
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&A[i][j]);
}
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",A[i][j]);
}
printf("\n");
}
}
不是来自String
。因此,您需要将JSONObject
实例转换为新的String
实例。
试试这个:
JSONObject
[编辑]
另一方面,如果您的输入数据只是 mSocket.on("start tracking", new Emitter.Listener() {
@Override
public void call(final Object... args) {
timer.scheduleAtFixedRate(new TimerTask() {
long t0 = System.currentTimeMillis();
@Override
public void run() {
JSONObject data;
String id;
try {
data = new JSONObject((String) args[0]);
id = data.getString("id");
} catch (JSONException e) {
return;
}
//cancel();
if (System.currentTimeMillis() - t0 > 60 * 1000) {
cancel();
} else {
//do my stuff
String deviceId = Settings.System.getString(getContentResolver(),
Settings.System.ANDROID_ID);
mSocket.emit("emmitting location", deviceId, latitude, longitude);
}
}
}, 0, 1000);
}
});
而不是JSON字符串,请执行以下操作:
String
注意:您实际上从未在任何地方使用 mSocket.on("start tracking", new Emitter.Listener() {
@Override
public void call(final Object... args) {
timer.scheduleAtFixedRate(new TimerTask() {
long t0 = System.currentTimeMillis();
@Override
public void run() {
String id = (String) args[0];
//cancel();
if (System.currentTimeMillis() - t0 > 60 * 1000) {
cancel();
} else {
//do my stuff
String deviceId = Settings.System.getString(getContentResolver(),
Settings.System.ANDROID_ID);
mSocket.emit("emmitting location", deviceId, latitude, longitude);
}
}
}, 0, 1000);
}
});
...
答案 1 :(得分:0)
Java似乎在如何处理JSONObject实例化中对字符串的强制转换方面有局限性。
因此,最好使用java String.valueOf()方法进行此类转换:
mSocket.on("start tracking", new Emitter.Listener() {
@Override
public void call(final Object... args) {
timer.scheduleAtFixedRate(new TimerTask() {
long t0 = System.currentTimeMillis();
@Override
public void run() {
JSONObject data;
String id;
try {
// Update conversion like this below
data = new JSONObject(String.valueOf(args[0]));
id = data.getString("id");
} catch (JSONException e) {
return;
}
//cancel();
if (System.currentTimeMillis() - t0 > 60 * 1000) {
cancel();
} else {
//do my stuff
String deviceId = Settings.System.getString(getContentResolver(),
Settings.System.ANDROID_ID);
mSocket.emit("emmitting location", deviceId, latitude, longitude);
}
}
}, 0, 1000);
}
});