无法在我的Android应用程序中访问由AWS EC2作为后端创建的API

时间:2016-08-28 16:25:56

标签: android amazon-web-services amazon-ec2

无法在我的Android应用中访问由AWS EC2创建的后端API。

我使用的网址是“http://ec2-52-88-152-29.us-west-2.compute.amazonaws.com/api/values

这是我的代码。

public class ServiceHelper {
JSONObject JSONresponseText;
Context context;
JSONObject jsonResultText;

public ServiceHelper(Context context) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    this.context = context;

}

public JSONObject jsonSendHTTPRequest(String requestData,
                                      String requestURL, String requestType) {
    try {
        if (!Constants.isConnectingToInternet(context)) {
            JSONresponseText = new JSONObject();
            JSONresponseText.put(Constants.KEY_ERROR,
                    Constants.TOAST_INTERNET);
        } else {
            HttpURLConnection connection = null;
            try {
                Log.e("request data", requestData + Constants.EMPTY_STRING
                        + requestURL);
                URL object = new URL(requestURL);
                connection = (HttpURLConnection) object.openConnection();
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setRequestMethod(requestType);
                connection.setRequestProperty(Constants.KEY_CONTENT_TYPE,
                        Constants.VALUE_CONTENT_TYPE);
                connection.setRequestProperty(Constants.KEY_ACCEPT,
                        Constants.VALUE_CONTENT_TYPE);

               if (requestType
                        .equalsIgnoreCase(Constants.POST_METHOD)) {
                OutputStreamWriter streamWriter = new OutputStreamWriter(connection.getOutputStream());                    
                streamWriter.write(requestData);
                streamWriter.flush();
                }

                StringBuilder stringBuilder = new StringBuilder();
                if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    InputStreamReader streamReader = new InputStreamReader(
                            connection.getInputStream());
                    BufferedReader bufferedReader = new BufferedReader(
                            streamReader);
                    String response = null;
                    while ((response = bufferedReader.readLine()) != null) {
                        stringBuilder.append(response + "\n");
                    }
                    bufferedReader.close();
                    Log.d("Result Value ", stringBuilder.toString());
                    jsonResultText = new JSONObject(
                            stringBuilder.toString());
                    return jsonResultText;
                } else {
                    Log.e("ServiceHelper", connection.getResponseMessage());
                    return null;
                }
            } catch (Exception exception) {
                Log.e("ServiceHelper", exception.toString());
                return null;
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }
    } catch (Exception e) {
        Log.e("ServiceHelper", e.toString());
    }
    return JSONresponseText;
 }
}

日志值

    08-28 22:18:39.282 21499-21499/com.demo.demoaws D/Response Code: 204
    08-28 22:18:39.282 21499-21499/com.demo.demoaws E/ServiceHelper: No Content

我的回复为No Content。我不知道是什么问题。我是否必须将标题附加为AWS credentials中的任何一个。任何人都可以帮助我。谢谢你。

1 个答案:

答案 0 :(得分:0)

使用库 OkHttpClient 进行网络通话。

图书馆让生活更轻松。

build.gradle

中添加依赖项
compile 'com.survivingwithandroid:weatherlib_okhttpclient:1.6.0'

现在使用OkHttpClient库进行网络调用

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("http://ec2-52-88-152-29.us-west-2.compute.amazonaws.com/api/values")
  .get()
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();
String jsonData = response.body().string();

还有chrome扩展postman,它还会为您的api调用生成OkHttpClient代码。