1

在使用 Eclipse 和 Java Android SDK 之前,我已经在各种编程类中创建了基本的 android 应用程序。我想要创建的应用程序需要用户输入稍后将被分析的信息。我希望人们能够将此数据与其他人的数据进行比较,因此我希望用户所做的每个条目都提交到数据库,以便稍后在有人尝试比较他们的数据时进行查询。我想知道如何做到这一点的方向。我应该找到一个免费的托管站点并设置一个 Sql 服务器还是有更好的方法来完成这个?

编辑:只是为了好玩。

4

3 回答 3

2

我是一个非常初学者的android开发人员,我发现使用像mongolab.com这样的云存储在线数据库对用户提交的数据非常友好。数据库和服务器之间的通信必须通过 JSON 解析和 URI 请求来完成。

这是您可以绑定到将发送存储在字段 tempData 中的对象的按钮的代码示例:

public void send(View view) {
    String apiURI = "https://api.mongolab.com/api/1/databases/MYDATABASE/collections/USERSUBMITTEDDATA?apiKey="
        + apiKey;
    try {

      // make web service connection
      final HttpPost request = new HttpPost(apiURI);
      request.setHeader("Accept", "application/json");
      request.setHeader("Content-type", "application/json");

      // Build JSON string with GSON library
      Gson gson = new Gson();

      JsonElement jsonElement = gson.toJsonTree(tempData);
      String json = gson.toJson(jsonElement);
      StringEntity entity = new StringEntity(json);

      Log.d("****Parameter Input****", "Testing:" + json);
      request.setEntity(entity);
      // Send request to WCF service
      final DefaultHttpClient httpClient = new DefaultHttpClient();

      new AsyncTask<Void, Void, Void>() {
        @Override
        public Void doInBackground(Void... arg) {
          try {
            HttpResponse response = httpClient.execute(request);
            Log.d("WebInvoke", "Saving: "
                + response.getStatusLine().toString());
            // Get the status of web service
            BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity()
                    .getContent()));
            // print status in log
            String line = "";
            while ((line = rd.readLine()) != null) {
              Log.d("****Status Line***", "Webservice: " + line);

            }
          } catch (Exception e) {
            Log.e("SendMail", e.getMessage(), e);
          }
          return null;
        }
      }.execute();

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

以下是用于检索数据库中元素的代码示例:

public void load() {
    String apiURI = "https://api.mongolab.com/api/1/databases/MYDATABASE/collections/USERSUBMITTEDDATA"
        + "?apiKey=" + apiKey;

    Log.d("****Status Line***", "" + apiURI);

    try {

      // make web service connection
      final StringBuilder builder = new StringBuilder();

      final HttpGet request = new HttpGet(apiURI);
      request.setHeader("Accept", "application/json");
      request.setHeader("Content-type", "application/json");
      final DefaultHttpClient httpClient = new DefaultHttpClient();

      new AsyncTask<Void, Void, String>() {

        @Override
        protected void onPostExecute(String result) {
          super.onPostExecute(result);
          doSomethingWithReceivedData(result); //THIS METHOD IS DEFINED IN BODY OF YOUR ACTIVITY
        }

        @Override
        public String doInBackground(Void... arg) {
          try {
            HttpResponse response = httpClient.execute(request);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {

              HttpEntity entity = response.getEntity();
              InputStream content = entity.getContent();

              BufferedReader reader = new BufferedReader(
                  new InputStreamReader(content));
              String line;
              while ((line = reader.readLine()) != null) {
                builder.append(line);
              }
              Log.d("****Status Line***", "Success");

              return builder.toString();

            } else {
              Log.d("****Status Line***",
                  "Failed to download file");
            }

          } catch (Exception e) {
            Log.e("SendMail", e.getMessage(), e);
          }
          return null;
        }
      }.execute();

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
于 2013-06-05T16:13:59.387 回答
0

您应该有一个数据库来存储数据。如上所述,数据库最好放在 MySQL (SQL) 中。您的应用程序应该有一个可以将结果 POST 到服务器的方法,服务器将读取字符串发送并检索和存储数据。一个好的开始是阅读JSON 并阅读Asynctask

您还需要知道如何构建您的服务器部分。一个好主意是从 PHP 开始,但我不是该领域的专家。我希望这可以帮助您开始您的项目。

于 2013-06-05T16:12:36.267 回答
0

简单,不需要数据库。

Apigee的 Usergrid正是您正在寻找的!

  1. 您可以存储每个用户的详细信息
  2. 检索存储的数据
  3. 跨设备发送事件和接收事件回调

最重要的是 - 没有服务器端代码。仅 API

仅供参考,即使您知道如何编写服务器代码,这也是您应该前进的方向。

PS:我不为 apigee 或 usergrid 工作。

于 2013-06-05T16:41:40.730 回答