2013-06-21 41 views
0

我正在创建一个简单的android应用程序,根据用户的奖励积分奖励奖励。 每个人都应该有他自己的用户名,密码,积分和愿望清单等简单的Android应用程序+数据库:我的Android应用程序需要什么? (PostgreSQL,REST API)

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

现在我不确定我的ANDROID APPLICATION本身需要什么吗? (除了代码)

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

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

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

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

回答

0

1)我是否需要另一个REST API?

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

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

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

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

创建服务后,您可以使用HttpClient拨打电话。网上有很多例子,其中一个例子可以在here找到。一旦与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(); 
    } 
} 
+0

非常感谢亚伦!这正是我所错过的。 – sam

相关问题