如何从Android应用程序调用REST API?

56

我是Android和编程的新手。我该如何从Android应用程序中调用REST API(进行GET/POST请求)?请给我推荐一个好的教程,或者给我一个入门的想法。


在大多数情况下,搜索“android http库”,它们通常有很好的示例。 - Sir l33tname
http://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/ - Dinesh Kannan
1个回答

79
  1. 如果你想集成Retrofit(所有步骤在此定义):

请前往我的博客:使用kotlin的retrofit

  1. 请使用android-async-http库。

以下链接逐步解释了一切。

http://loopj.com/android-async-http/

这里有示例应用程序:

  1. http://www.techrepublic.com/blog/software-engineer/calling-restful-services-from-your-android-app/

  2. http://blog.strikeiron.com/bid/73189/Integrate-a-REST-API-into-Android-Application-in-less-than-15-minutes

创建一个类:

public class HttpUtils {
  private static final String BASE_URL = "http://api.twitter.com/1/";
 
  private static AsyncHttpClient client = new AsyncHttpClient();

  public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.get(getAbsoluteUrl(url), params, responseHandler);
  }

  public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.post(getAbsoluteUrl(url), params, responseHandler);
  }
      
  public static void getByUrl(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.get(url, params, responseHandler);
  }

  public static void postByUrl(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.post(url, params, responseHandler);
  }

  private static String getAbsoluteUrl(String relativeUrl) {
      return BASE_URL + relativeUrl;
  }
}

调用方法:

    RequestParams rp = new RequestParams();
    rp.add("username", "aaa"); rp.add("password", "aaa@123");
                    
    HttpUtils.post(AppConstant.URL_FEED, rp, new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            // If the response is JSONObject instead of expected JSONArray
            Log.d("asd", "---------------- this is response : " + response);
            try {
                JSONObject serverResp = new JSONObject(response.toString());                                                
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }                   
        }
            
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
            // Pull out the first event on the public timeline
                    
        }
    });
请在您的清单文件中授予互联网权限。
 <uses-permission android:name="android.permission.INTERNET" />

如果需要,您可以在 build.gradle 文件中添加 compile 'com.loopj.android:android-async-http:1.4.9' 以获取 Header[]compile 'org.json:json:20160212' 以获取 JSONObject


1
此教程使用 http 的 get() 方法。如果我想要使用 post() 呢? - Drunken Daddy
http://lukencode.com/2010/04/27/calling-web-services-in-android-using-httpclient/ - Yogendra
3
请翻译英文到中文。只返回翻译后的文本:还有请检查我的回答,我已经更新了。 - Yogendra
  1. 从http://loopj.com/android-async-http/复制一个jar文件并放置在lib文件夹中。
  2. 将类HttpUtils放置在您的源代码文件夹中。
  3. 在您想要调用API的位置调用该方法。
- Yogendra
11
我建议使用Retrofit。我想不出在Android上消费REST API更简单的方法了。总之,我将这里留给以后来到这里的用户。 - LeoFarage
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接