![](/img/trans.png)
[英]How can i make an HTTP POST request and and use the Json Response i should get in android
[英]how to make and handle an Http Request that give a json file as response in Android?
我有一個項目,包括使用雪地機進行航空(顯示和解碼雪地機),我想使用我的 api 密鑰向服務器發出請求,但是當我將完整鏈接放在瀏覽器上時,響應不是正文響應而是 json每次發出請求時都會下載的文件。如何使用 Android 在 Java 代碼中處理此文件。您能給我一個示例嗎? 並提前致謝。
an example that i tried:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_snowtam_codes);
URL url = null;
try {
url = new URL("https://ajax.googleapis.com/ajax/services/feed/find?" +
"v=1.0&q=Official%20Google%20Blog&userip=INSERT-USER-IP");
} catch (MalformedURLException e) {
e.printStackTrace();
}
URLConnection connection = null;
try {
connection = url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
connection.addRequestProperty("Referer", "https://applications.icao.int/dataservices/api/notams-
realtime-list?api_key=my_api_key&format=json&criticality=1&locations=ENBO");
StringBuilder builder = new StringBuilder();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
while(true) {
String line="";
try {
if (!((line = reader.readLine()) != null)) break;
} catch (IOException e) {
e.printStackTrace();
}
builder.append(line);
}
try {
JSONObject json = new JSONObject(builder.toString());
System.out.println("the json object received is::"+json);
} catch (JSONException e) {
e.printStackTrace();
}
}
看看排球
您可以創建一個自定義請求類來處理文件下載,如下所示:
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import java.util.HashMap;
import java.util.Map;
public class InputStreamVolleyRequest extends Request<byte[]> {
private final Response.Listener<byte[]> mListener;
private Map<String, String> mParams;
//create a static map for directly accessing headers
public Map<String, String> responseHeaders;
public Map<String, String> mRequestHeaders;
public InputStreamVolleyRequest(int method, String mUrl, Response.Listener<byte[]> listener,
Response.ErrorListener errorListener, HashMap<String, String> params, HashMap<String, String> requestHeaders) {
super(method, mUrl, errorListener);
setShouldCache(false);
mRequestHeaders = requestHeaders;
mListener = listener;
mParams = params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
mRequestHeaders.putAll(super.getHeaders());
return mRequestHeaders;
}
@Override
protected Map<String, String> getParams() {
return mParams;
}
@Override
protected void deliverResponse(byte[] response) {
mListener.onResponse(response);
}
@Override
protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {
responseHeaders = response.headers;
return Response.success(response.data, HttpHeaderParser.parseCacheHeaders(response));
}
}
然后像這樣使用它:
String mUrl = "https://ajax.googleapis.com/ajax/services/feed/find?" +
"v=1.0&q=Official%20Google%20Blog&userip=INSERT-USER-IP";
HashMap<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("Referer", "https://applications.icao.int/dataservices/api/notams-realtime-list?api_key=my_api_key&format=json&criticality=1&locations=ENBO")
InputStreamVolleyRequest request = new InputStreamVolleyRequest(Request.Method.GET, mUrl,
new Response.Listener<byte[]>() {
@Override
public void onResponse(byte[] response) {
try {
if (response != null) {
JSONObject responseJsonObject = new JSONObject(new String(response));
// TODO do something with the JSONObject
}
} catch (Exception e) {
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE");
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO handle the error
error.printStackTrace();
}
}, null, requestHeaders);
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new HurlStack());
mRequestQueue.add(request);
更新:
確保您已將以下權限添加到您的清單中:
<uses-permission android:name="android.permission.INTERNET" />
最好使用 AsyncHttpClient。
例子:
public void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
(new AsyncHttpClient()).get(url, params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
//handle async response callback
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
//handle async response callback
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
//handle async response callback
}
});
}
教程: https : //guides.codepath.com/android/Using-Android-Async-Http-Client
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.