如何使用 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);