Как я могу получить ответ от запроса http get в Java БЕЗ BufferedReader - PullRequest
0 голосов
/ 13 января 2020

Я знаю, что есть тысячи статей и вопросов и ответов, которые учат меня, как отправлять HTTP-запрос в Java. Но все они используют BufferedReader для чтения ответа от сервера.

Я не хочу использовать BufferedReader , потому что я обнаружил " OutOfMemoryError ", когда используя его в моем android проекте. Я не знаю, почему это произошло, в то время как другие добились успеха, но это было определенно вызвано BufferedReader после долгого времени отладки, и я действительно устал от этой проблемы. Есть ли способ получить ответ, кроме создания нового объекта BufferedReader? Я просто хочу отправить простейший запрос get и получить ответ, который предоставляет HTML контент, без учета эффективности.

Ответы [ 2 ]

1 голос
/ 13 января 2020

Вы можете использовать залп для этого. Это быстро, плавно и легко.

В файле build.gradle добавьте эту строку и скомпилируйте:

implementation 'com.android.volley:volley:1.1.1'

Создайте сетевой синглтон

public class NetworkSingleton {
    private static NetworkSingleton instance;
    private RequestQueue requestQueue;
    private ImageLoader imageLoader;
    private static Context ctx;

    private NetworkSingleton(Context context) {
        ctx = context;
        requestQueue = getRequestQueue();

        imageLoader = new ImageLoader(requestQueue,
                new ImageLoader.ImageCache() {
                    private final LruCache<String, Bitmap>
                            cache = new LruCache<String, Bitmap>(20);

                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }

                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url, bitmap);
                    }
                });
    }

    public static synchronized NetworkSingleton getInstance(Context context) {
        if (instance == null) {
            instance = new NetworkSingleton(context);
        }
        return instance;
    }

    public RequestQueue getRequestQueue() {
        if (requestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            requestQueue = Volley.newRequestQueue(ctx.getApplicationContext());
        }
        return requestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return imageLoader;
    }
}

Создайте Строка запроса:

StringRequest stringRequest = new StringRequest(Request.Method.GET, "URL to fetch",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                       //This is executed after successful response to URL
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        //If error occurs
                    }
                }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String>  params = new HashMap<String, String>();
                params.put("Authorization", "Add a header to request");

                return params;
            }
        };

        NetworkSingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);

Подробнее о залпе можно узнать по адресу:

https://developer.android.com/training/volley
1 голос
/ 13 января 2020

Используйте OkHttp для эффективного доступа к сети

Что такое OkHTTP? OkHTTP - это проект с открытым исходным кодом, разработанный для эффективного HTTP-клиента.

// avoid creating several instances, should be singleon
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
                     .url("https://www.vogella.com/index.html")
                     .build();

Вы также можете добавить параметры

HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.github.help").newBuilder();
urlBuilder.addQueryParameter("v", "1.0");
urlBuilder.addQueryParameter("user", "vogella");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();

source https://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...