php - Android-Studio - Android 应用程序中的 http 连接处理

标签 php android mysql

我有问题。我无法连接到 MySQL 服务器。我遵循了本教程 simplifiedcoding.net/android-php-mysql-login-tutorial-android-login-app-3/我想进行简单的 PHP MySQL 登录。但有些东西如“NameValuePair”、“BasicNameValuePair”、“HttpClient”、“HttpPost”、“HttpResponse”、“HttpEntity”、“UrlEncodedFormEntity”等已被弃用。我想问一下,任何人都可以正确编码吗?或者只是帮助我?

这是无法正常工作的代码: (并感谢您的帮助)

@Override
            protected String doInBackground(String... params) {
                String uname = params[0];
                String pass = params[1];

                InputStream is = null;
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("username", uname));
                nameValuePairs.add(new BasicNameValuePair("password", pass));
                String result = null;

                try{
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost("site.com/login.php");
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                    HttpResponse response = httpClient.execute(httpPost);

                    HttpEntity entity = response.getEntity();

                    is = entity.getContent();

                    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");
                    }
                    result = sb.toString();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return result;
            }

最佳答案

实际上您发布的链接来 self 的网站。当我编写本教程时,这些类并没有被弃用。如果您要查看我的网站,那么我已经发布了更新的教程。

要向您的 Web 服务器发送 http post 请求,您可以使用以下代码。

public class RequestHandler {
public String sendPostRequest(String requestURL,
                              HashMap<String, String> postDataParams) {
    URL url;

    StringBuilder sb = new StringBuilder();
    try {
        url = new URL(requestURL);

        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(postDataParams));

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

        if (responseCode == HttpsURLConnection.HTTP_OK) {

            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            sb = new StringBuilder();
            String response;
            while ((response = br.readLine()) != null){
                sb.append(response);
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return sb.toString();
}

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"));
    }

    return result.toString();
}
}

现在您需要做的就是在主 Activity 中创建一个 AsyncTask 并在 doInBackGround 方法中

调用 sendPostRequest() 方法

您必须传递脚本的 url 来处理 post 请求,并传递 hashmap 中的参数以随请求一起发送数据。

有关更多详细信息,请访问 Android PHP MySQL - CRUD Operation

关于php - Android-Studio - Android 应用程序中的 http 连接处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31366728/

相关文章:

php - mysql慢查询中的Codeigniter session 查询

java - 如何解压我在 Android 8.1 rom(基于 aosp)中找到的 system.new.dat.br 文件

android - 为什么 Android Studio 4.1 无法启动?

php - 数据未保存在我的数据库中

php - 正确处理多行多列的查询结果

javascript - AngularJs 和 Codeigniter 路由导致无限重定向循环

php - 在 ubuntu 上使用 VS Code 进行 Xdebug 无法正常工作

java - 当用户想要应用程序中的另一种颜色时如何更改颜色?

php - MySQL 查询 : Retrieve 'birthdays' (YYYY-MM-DD) from the database, 并选择那些在当前周(无论年份)下降的那些。/PHP

Mysql变长十进制