Make an HTTP request with android

Вам нужно изменить свой код, тогда он будет отлично работать, см. Этот код https://stackblitz.com/edit/react-jessyq

Измените размер окна вывода увидим разные изображения для разных размеров. Надеюсь, что ваша проблема будет решена. HAPPY CODING:)

изображение тег используется для адаптивного изображения, насколько я знаю, изображение будет изменяться в зависимости от ширины устройства. Для этой цели вы должны использовать тег изображения с медиа-запросом, подобным этому


  
  
  Flowers

. 117] И вы не можете использовать класс в реакции, используйте className вместо класса.

346
задан kablu 14 May 2014 в 23:38
поделиться

4 ответа

ОБНОВЛЕНИЕ

Это очень старый ответ. Я определенно больше не буду рекомендовать клиент Apache. Вместо этого используйте:

Исходный ответ

Прежде всего, запросите разрешение на доступ к сети, добавьте следующее в свой манифест:

<uses-permission android:name="android.permission.INTERNET" />

Тогда проще всего использовать http-клиент Apache в комплекте с Android:

    HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response = httpclient.execute(new HttpGet(URL));
    StatusLine statusLine = response.getStatusLine();
    if(statusLine.getStatusCode() == HttpStatus.SC_OK){
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        response.getEntity().writeTo(out);
        String responseString = out.toString();
        out.close();
        //..more logic
    } else{
        //Closes the connection.
        response.getEntity().getContent().close();
        throw new IOException(statusLine.getReasonPhrase());
    }

Если вы хотите, чтобы он работал в отдельном потоке, я бы порекомендовал расширить AsyncTask:

class RequestTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... uri) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;
        try {
            response = httpclient.execute(new HttpGet(uri[0]));
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                responseString = out.toString();
                out.close();
            } else{
                //Closes the connection.
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (ClientProtocolException e) {
            //TODO Handle problems..
        } catch (IOException e) {
            //TODO Handle problems..
        }
        return responseString;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        //Do anything with response..
    }
}

Затем вы можете сделать запрос по:

   new RequestTask().execute("http://stackoverflow.com");
470
ответ дан 23 November 2019 в 00:30
поделиться

Используйте Залп, как предложено выше. Добавьте следующее в build.gradle (Модуль: приложение)

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

Добавляют следующее в AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

И добавляют следующее к Вам Код деятельности:

public void httpCall(String url) {

    RequestQueue queue = Volley.newRequestQueue(this);

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // enjoy your response
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // enjoy your error status
                }
    });

    queue.add(stringRequest);
}

Это заменяет http клиент, и это очень просто.

1
ответ дан 23 November 2019 в 00:30
поделиться

С резьбой:

private class LoadingThread extends Thread {
    Handler handler;

    LoadingThread(Handler h) {
        handler = h;
    }
    @Override
    public void run() {
        Message m = handler.obtainMessage();
        try {
            BufferedReader in = 
                new BufferedReader(new InputStreamReader(url.openStream()));
            String page = "";
            String inLine;

            while ((inLine = in.readLine()) != null) {
                page += inLine;
            }

            in.close();
            Bundle b = new Bundle();
            b.putString("result", page);
            m.setData(b);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        handler.sendMessage(m);
    }
}
4
ответ дан 23 November 2019 в 00:30
поделиться

, если у вас нет явной причины выбрать Apache HttpClient, вам следует предпочесть java.net.URLConnection. вы можете найти множество примеров того, как его использовать в Интернете.

мы также улучшили документацию по Android после вашего исходного сообщения: http://developer.android.com/reference/java/net/HttpURLConnection.html

и мы говорили о торговле офф в официальном блоге: http://android-developers.blogspot.com/2011/09/androids-http-clients.html

65
ответ дан 23 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: