如何使用 Android AsyncHttpClient 从 MongoDB 获取数据
How to get data from MongoDB with Android AsyncHttpClient
背景:
我正在处理一个交给我的 Android 项目,有些东西我仍在尝试学习。在我之前参与项目的人没有留下任何文件,所以请原谅我。
问题:
基本上我想知道如何从我们的 MongoDB 中取回数据(我认为)。使用 AsyncHttpClient
参数通过 post
发送
private AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("authorization", getSharedPreferences("Prefs", Context.MODE_PRIVATE).getString("authToken", ""));
params.put("name", name);
params.put("email", email);
client.post(Utilities.getBaseURL() + "session/updateProfile", params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, JSONObject response) {
HashMap<String, String> profile = new HashMap<>();
profile.put("user_name", name);
profile.put("user_email", email);
Utilities.updateAllDetails(profile);
}
@Override
public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, Throwable throwable, JSONObject response) {
Utilities.showUserDialog(context, "Profile Change Error", "Attention, there was an error in updating your profile, please try again.");
}
});
所以上面的代码基本上是更新配置文件并通过 http post.
发送参数
后来客户端上有get:
client.get(Utilities.getBaseURL() + "session/getUserId", new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, JSONObject response) {
try {
userId = response.getString("responseString");
startActivityForResult(intent, PICK_IMAGE);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, Throwable throwable, JSONObject response) {}
});
我不明白的是"session/updateProfile"
和"session/getUserId"
是从哪里来的。这是 API 调用吗?如果是,我如何找到可用的内容以及如何添加?
更新
在网站的 JavaScript 文件中找到此代码。也许这可以引导某人帮我把所有东西放在一起?
JsonRoutes.add('get', '/api/v1/session/getUserId', function(req, res, next) {
var authToken = req.headers["authorization"];
var userObj = verifyUser(authToken);
var response = {};
if (userObj) {
response.responseString = userObj._id;
JsonRoutes.sendResult(res, 200, response);
} else {
response.responseString = "user not found";
JsonRoutes.sendResult(res, 200, response);
}
});
是否需要添加到此 JS 文件以展开 API?
where [do] "session/updateProfile" and "session/getUserId" come from? Is this an API call
是的,REST API 调用 Utilities.getBaseURL()
指向的任何地方。
how can I find what is available?
好吧,如果该服务器是您的,那么您将需要为此寻找一些代码/文档。否则,如果它是其他一些外部服务,您仍然需要查找一些 API 文档或联系确实了解它的人。您在评论中提到它是 DigitalOcean,因此它不是外部服务。还有其他服务器端代码需要检查。
how to add to it?
如果它是一个外部服务,你可能不能。由于此 DigitalOcean 服务器实际上可以是 运行 任何服务,因此它完全取决于服务器端编程语言。您已经提到 Javascript 文件和 MongoDB,所以我猜它是某种 NodeJS 变体。您在评论中提到了 MeteorJS,因此这是您添加新功能所需的文档。
Do I need to add to this JS file to expand the API?
简单地说:是的。
I want to know how to get data back from our MongoDB
基本上这一行就是这样做的。当然,响应代码不应该总是200,响应字符串的内容可以是任何你想要的,但可能应该是JSON,或者至少Android可以解析
]
JsonRoutes.sendResult(res, 200, response);
背景: 我正在处理一个交给我的 Android 项目,有些东西我仍在尝试学习。在我之前参与项目的人没有留下任何文件,所以请原谅我。
问题:
基本上我想知道如何从我们的 MongoDB 中取回数据(我认为)。使用 AsyncHttpClient
参数通过 post
private AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("authorization", getSharedPreferences("Prefs", Context.MODE_PRIVATE).getString("authToken", ""));
params.put("name", name);
params.put("email", email);
client.post(Utilities.getBaseURL() + "session/updateProfile", params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, JSONObject response) {
HashMap<String, String> profile = new HashMap<>();
profile.put("user_name", name);
profile.put("user_email", email);
Utilities.updateAllDetails(profile);
}
@Override
public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, Throwable throwable, JSONObject response) {
Utilities.showUserDialog(context, "Profile Change Error", "Attention, there was an error in updating your profile, please try again.");
}
});
所以上面的代码基本上是更新配置文件并通过 http post.
发送参数后来客户端上有get:
client.get(Utilities.getBaseURL() + "session/getUserId", new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, JSONObject response) {
try {
userId = response.getString("responseString");
startActivityForResult(intent, PICK_IMAGE);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, Throwable throwable, JSONObject response) {}
});
我不明白的是"session/updateProfile"
和"session/getUserId"
是从哪里来的。这是 API 调用吗?如果是,我如何找到可用的内容以及如何添加?
更新
在网站的 JavaScript 文件中找到此代码。也许这可以引导某人帮我把所有东西放在一起?
JsonRoutes.add('get', '/api/v1/session/getUserId', function(req, res, next) {
var authToken = req.headers["authorization"];
var userObj = verifyUser(authToken);
var response = {};
if (userObj) {
response.responseString = userObj._id;
JsonRoutes.sendResult(res, 200, response);
} else {
response.responseString = "user not found";
JsonRoutes.sendResult(res, 200, response);
}
});
是否需要添加到此 JS 文件以展开 API?
where [do] "session/updateProfile" and "session/getUserId" come from? Is this an API call
是的,REST API 调用 Utilities.getBaseURL()
指向的任何地方。
how can I find what is available?
好吧,如果该服务器是您的,那么您将需要为此寻找一些代码/文档。否则,如果它是其他一些外部服务,您仍然需要查找一些 API 文档或联系确实了解它的人。您在评论中提到它是 DigitalOcean,因此它不是外部服务。还有其他服务器端代码需要检查。
how to add to it?
如果它是一个外部服务,你可能不能。由于此 DigitalOcean 服务器实际上可以是 运行 任何服务,因此它完全取决于服务器端编程语言。您已经提到 Javascript 文件和 MongoDB,所以我猜它是某种 NodeJS 变体。您在评论中提到了 MeteorJS,因此这是您添加新功能所需的文档。
Do I need to add to this JS file to expand the API?
简单地说:是的。
I want to know how to get data back from our MongoDB
基本上这一行就是这样做的。当然,响应代码不应该总是200,响应字符串的内容可以是任何你想要的,但可能应该是JSON,或者至少Android可以解析
]JsonRoutes.sendResult(res, 200, response);