无法在我的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
中的任何一个。任何人都可以帮助我。谢谢你。
答案 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代码。