可以在 Android Studio 中使用 httpClient 吗? [英] can use httpClient in Android Studio?

查看:51
本文介绍了可以在 Android Studio 中使用 httpClient 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 httpClient 像这样将数据发送到 php 文件

i use httpClient to send data to php file like this

php

<?php
    echo $_POST['My_Data'];
?> 

然后我将 <uses-permission android:name="android.permission.INTERNET"/> 添加到 AndroidManifest.xml 以连接互联网.

and i add <uses-permission android:name="android.permission.INTERNET" /> to AndroidManifest.xml for connect internet.

这是我的主要活动

SendActivity.java

SendActivity.java

public class SendActivity extends ActionBarActivity {

    String myJSON;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send);

        SendData();
    }

    public void SendData(){
        class GetDataJSON extends AsyncTask<String, Void, String>{

            private ProgressDialog pDialog;
            private InputStream is = null;
            private String url = "http://----/send.php";
            private String page_output = "";

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

                try {
                        // Building Parameters
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("My_Data", "this is my data"));
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();

                String line = null;
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                is.close();
                page_output = sb.toString();

                Log.i("LOG", "page_output --> " + page_output);
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }

            return page_output;
        }

            @Override
            protected void onPostExecute(String result){
                Log.i("LOG", " onPostExecute -> " + result );
                myJSON=result;
                Log.i("LOG", "myJSON" + myJSON);
            }
        }
        GetDataJSON g = new GetDataJSON();
        Log.i("LOG", " GetDataJSON " );
        g.execute();
    }
}

我使用 Android Studio 和大量代码已弃用而且我的数据没有发送到 php 并且我无法从 php 获取数据

i use Android Studio and Lots of code deprecated And my data not send to php and i can't get data from php

Android Studio 的 httpClient 是否已过期,还是我错了?

is httpClient Expired from Android Studio or I'm wrong?

推荐答案

Http 客户端在 api 级别 22 中已弃用.因此您必须使用开放的 OpenUrlConnection.您可以使用此代码

Http client is deprecated in api level 22. So you must use open OpenUrlConnection. You can use this code

public class FetchUrl {

    private URL url;

    public String fetchUrl(String urlString, HashMap<String, String> values) {
        String response = "";
        try {
            url = new URL(urlString);
            Log.d("url string", urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);

            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                    os, "UTF-8"));
            writer.write(getPostDataString(values));

            writer.flush();
            writer.close();
            os.close();
            int responseCode = conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {
                String line;
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        conn.getInputStream()));
                while ((line = br.readLine()) != null) {
                    response += line;
                }
            } else {
                response = "";

                throw new Exception(responseCode + "");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }

    private String getPostDataString(HashMap<String, String> params)
            throws UnsupportedEncodingException {
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for (Map.Entry<String, String> entry : params.entrySet()) {
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }
        Log.d("query string", result.toString());
        return result.toString();
    }

}

这篇关于可以在 Android Studio 中使用 httpClient 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆