0

我正在创建一个简单的 android 应用程序,它根据用户拥有的奖励积分发放奖励。每个人都应该有自己的用户名、密码、奖励积分和心愿单等。

我打算在 Heroku 上使用 PostgreSQL 数据库,并在 Heroku 上编写一个 REST API。

现在我不太确定我的 ANDROID 应用程序本身需要什么?(除了代码)

1) 我需要另一个 REST API 吗?

2)我需要另一个数据库吗?

3) 我的 Android 应用程序如何与 REST API 通信(与 Heroku 上的 PostgreSQL 通信)?-> 我需要为此编写什么 java 代码?

非常感谢。很难找到合适资源的初学者。:(

4

1 回答 1

0

1) 我需要另一个 REST API 吗?

您只需要一个 API 作为数据的前门。

2)我需要另一个数据库吗?

不,您不需要另一个数据库。如果您发现需要使用本地存储,那么您可以开始考虑使用 SQLite 实例或在适用的情况下存储到 SD 卡,偏好也可以是一个选项。

3) 我的 Android 应用程序如何与 REST API 通信(与 Heroku 上的 PostgreSQL 通信)?-> 我需要为此编写什么 java 代码?

创建服务后,您可以使用HttpClient调用该服务。网上有很多例子,一个这样的例子可以在这里找到。一旦您与您的 API 交互,它将随后通过 DAL 或其他抽象层调用数据库并返回请求的数据。

public class RestClient {

    private ArrayList <NameValuePair> params;
    private ArrayList <NameValuePair> headers;

    private String url;

    private int responseCode;
    private String message;

    private String response;

    public String getResponse() {
        return response;
    }

    public String getErrorMessage() {
        return message;
    }

    public int getResponseCode() {
        return responseCode;
    }

    public RestClient(String url)
    {
        this.url = url;
        params = new ArrayList<NameValuePair>();
        headers = new ArrayList<NameValuePair>();
    }

    public void AddParam(String name, String value)
    {
        params.add(new BasicNameValuePair(name, value));
    }

    public void AddHeader(String name, String value)
    {
        headers.add(new BasicNameValuePair(name, value));
    }

    public void Execute(RequestMethod method) throws Exception
    {
        switch(method) {
            case GET:
            {
                //add parameters
                String combinedParams = "";
                if(!params.isEmpty()){
                    combinedParams += "?";
                    for(NameValuePair p : params)
                    {
                        String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),”UTF-8″);
                        if(combinedParams.length() > 1)
                        {
                            combinedParams  +=  "&" + paramString;
                        }
                        else
                        {
                            combinedParams += paramString;
                        }
                    }
                }

                HttpGet request = new HttpGet(url + combinedParams);

                //add headers
                for(NameValuePair h : headers)
                {
                    request.addHeader(h.getName(), h.getValue());
                }

                executeRequest(request, url);
                break;
            }
            case POST:
            {
                HttpPost request = new HttpPost(url);

                //add headers
                for(NameValuePair h : headers)
                {
                    request.addHeader(h.getName(), h.getValue());
                }

                if(!params.isEmpty()){
                    request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                }

                executeRequest(request, url);
                break;
            }
        }
    }

    private void executeRequest(HttpUriRequest request, String url)
    {
        HttpClient client = new DefaultHttpClient();

        HttpResponse httpResponse;

        try {
            httpResponse = client.execute(request);
            responseCode = httpResponse.getStatusLine().getStatusCode();
            message = httpResponse.getStatusLine().getReasonPhrase();

            HttpEntity entity = httpResponse.getEntity();

            if (entity != null) {

                InputStream instream = entity.getContent();
                response = convertStreamToString(instream);

                // Closing the input stream will trigger connection release
                instream.close();
            }

        } catch (ClientProtocolException e)  {
            client.getConnectionManager().shutdown();
            e.printStackTrace();
        } catch (IOException e) {
            client.getConnectionManager().shutdown();
            e.printStackTrace();
        }
    }

    private static String convertStreamToString(InputStream is) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
}
于 2013-06-21T20:44:35.763 回答