Http Получить с помощью Android HttpURLConnection

java android-emulator android-internet

165639 просмотра

6 ответа

Я новичок в разработке на Java и Android и пытаюсь создать простое приложение, которое должно связаться с веб-сервером и добавить некоторые данные в базу данных, используя http get.

Когда я делаю вызов с помощью веб-браузера на моем компьютере, он работает просто отлично. Однако, когда я выполняю вызов, запустив приложение в эмуляторе Android, данные не добавляются.

Я добавил интернет-разрешение в манифест приложения. Logcat не сообщает о проблемах.

Может кто-нибудь помочь мне понять, что не так?

Вот исходный код:

package com.example.httptest;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class HttpTestActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tv = new TextView(this);
        setContentView(tv);

        try {
            URL url = new URL("http://www.mysite.se/index.asp?data=99");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.disconnect();
            tv.setText("Hello!");
        }
        catch (MalformedURLException ex) {
            Log.e("httptest",Log.getStackTraceString(ex)); 
        }
        catch (IOException ex) {
            Log.e("httptest",Log.getStackTraceString(ex));
        }   
    }        
}
Автор: user1119112 Источник Размещён: 12.11.2019 09:14

Ответы (6)


67 плюса

Решение

Попробуйте получить поток ввода из этого, затем вы можете получить текстовые данные так:

    URL url;
    HttpURLConnection urlConnection = null;
    try {
        url = new URL("http://www.mysite.se/index.asp?data=99");

        urlConnection = (HttpURLConnection) url
                .openConnection();

        InputStream in = urlConnection.getInputStream();

        InputStreamReader isw = new InputStreamReader(in);

        int data = isw.read();
        while (data != -1) {
            char current = (char) data;
            data = isw.read();
            System.out.print(current);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }    
    }

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

Проблема в том, что когда вы открываете соединение - оно не «вытягивает» никаких данных.

Автор: Davos555 Размещён: 28.12.2011 11:03

38 плюса

Вот полный AsyncTaskкласс

public class GetMethodDemo extends AsyncTask<String , Void ,String> {
    String server_response;

    @Override
    protected String doInBackground(String... strings) {

        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(strings[0]);
            urlConnection = (HttpURLConnection) url.openConnection();

            int responseCode = urlConnection.getResponseCode();

            if(responseCode == HttpURLConnection.HTTP_OK){
                server_response = readStream(urlConnection.getInputStream());
                Log.v("CatalogClient", server_response);
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        Log.e("Response", "" + server_response);


    }
}

// Converting InputStream to String

private String readStream(InputStream in) {
        BufferedReader reader = null;
        StringBuffer response = new StringBuffer();
        try {
            reader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return response.toString();
    }

Позвонить в этот AsyncTaskкласс

new GetMethodDemo().execute("your web-service url");
Автор: Bhargav Thanki Размещён: 11.07.2016 06:03

15 плюса

Я создал с callBack (делегат) ответ на класс деятельности.

public class WebService extends AsyncTask<String, Void, String> {

    private Context mContext;
    private OnTaskDoneListener onTaskDoneListener;
    private String urlStr = "";

    public WebService(Context context, String url, OnTaskDoneListener onTaskDoneListener) {
        this.mContext = context;
        this.urlStr = url;
        this.onTaskDoneListener = onTaskDoneListener;
    }

    @Override
    protected String doInBackground(String... params) {
        try {

            URL mUrl = new URL(urlStr);
            HttpURLConnection httpConnection = (HttpURLConnection) mUrl.openConnection();
            httpConnection.setRequestMethod("GET");
            httpConnection.setRequestProperty("Content-length", "0");
            httpConnection.setUseCaches(false);
            httpConnection.setAllowUserInteraction(false);
            httpConnection.setConnectTimeout(100000);
            httpConnection.setReadTimeout(100000);

            httpConnection.connect();

            int responseCode = httpConnection.getResponseCode();

            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader br = new BufferedReader(new InputStreamReader(httpConnection.getInputStream()));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                }
                br.close();
                return sb.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        if (onTaskDoneListener != null && s != null) {
            onTaskDoneListener.onTaskDone(s);
        } else
            onTaskDoneListener.onError();
    }
}

где

public interface OnTaskDoneListener {
    void onTaskDone(String responseData);

    void onError();
}

Вы можете изменить в соответствии с вашими потребностями. Это для получения

Автор: Xar E Ahmer Размещён: 31.08.2016 06:33

4 плюса

Если вам нужен очень простой вызов, вы можете напрямую использовать URL:

import java.net.URL;

    new URL("http://wheredatapp.com").openStream();
Автор: Oded Breiner Размещён: 19.09.2015 04:27

2 плюса

Простое и эффективное решение : используйте залп

 StringRequest stringRequest = new StringRequest(Request.Method.GET, finalUrl ,
           new Response.Listener<String>() {
                    @Override
                    public void onResponse(String){
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            HashMap<String, Object> responseHashMap = new HashMap<>(Utility.toMap(jsonObject)) ;
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("api", error.getMessage().toString());
            }
        });

        RequestQueue queue = Volley.newRequestQueue(context) ;
        queue.add(stringRequest) ;
Автор: Natesh bhat Размещён: 01.07.2018 07:32

-5 плюса

URL url = новый URL (" https://www.google.com ");

// если вы используете

URLConnection conn = url.openConnection ();

// изменить его на

HttpURLConnection conn = (HttpURLConnection) url.openConnection ();

Автор: M.Saleh Размещён: 02.11.2016 08:06
Вопросы из категории :
32x32