无法将POST从android发送到php

胡艾伦

我是android的新手,我尝试使用android http post和php进行简单的登录测试,尽管我无法使用以下代码发送帖子:

package com.yagami.boook.classify;

import android.app.ProgressDialog;
import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by allen on 2017/1/1.
 */

public class GetUserInfo extends AsyncTask<String, Integer, String> {

//    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
//        dialog = ProgressDialog.show(MainActivity.class, "Retrieving User Data", "Please wait...", true);
    }

    @Override
    protected void onPostExecute(String aString) {
        super.onPostExecute(aString);
//        dialog.dismiss();
    }

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

        HttpURLConnection connection;
        OutputStreamWriter request = null;
        URL url = null;
        Log.d("A","A");

        try {


            url = new URL("http://localhost/login.php");
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");

            Log.d("B","B");

            request = new OutputStreamWriter(connection.getOutputStream());
            Log.d("C","C");
            request.write(strings[0]);
            request.flush();
            request.close();

            InputStreamReader isr = new InputStreamReader(connection.getInputStream());
            BufferedReader reader = new BufferedReader(isr);

            String response = reader.readLine();
            isr.close();
            reader.close();

            return response;
        } catch (IOException e) {
            // Error
        }
        return null;
    }
}

这是php文件,我尝试打印txt文件,所以我知道是否收到任何东西:

<?php
    $email = $_POST['username'];
    $password = $_POST['password'];

//  echo $username."<br>";
//  echo $password."<br>";

    $connect = mysql_connect("localhost" , "root" , "112233");
    mysql_select_db("classify", $connect);
    $data = mysql_query("select * from users where email = '$email'");
    $row = mysql_fetch_row($data);

//  echo $row[2];

    if($row[2] == $password) echo "pass";
    else echo "nopass";

    $fp = fopen('xxx.txt', 'w');
    fwrite($fp , "abc");
    fclose($fp);

?>

这是日志,我在代码中添加了一些Log.d,这样可以更轻松地了解正在发生的事情。(如您所见,Log.d(“ C”,“ C”)未显示)

01/01 17:22:50: Launching app
$ adb push C:\Users\allen\Desktop\MyApplication\app\build\outputs\apk\app-debug.apk /data/local/tmp/com.example.allen.myapplication
$ adb shell pm install -r "/data/local/tmp/com.example.allen.myapplication"
Success


$ adb shell am start -n "com.example.allen.myapplication/com.example.allen.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Client not ready yet..Waiting for process to come online
Connected to process 3148 on device Nexus_5X_API_25 [emulator-5554]
W/System: ClassLoader referenced unknown path: /data/app/com.example.allen.myapplication-2/lib/x86
I/InstantRun: Instant Run Runtime started. Android package is com.example.allen.myapplication, real application class is null.
W/System: ClassLoader referenced unknown path: /data/app/com.example.allen.myapplication-2/lib/x86
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Swap behavior 1
E/EGL_emulation: tid 3195: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x99477440, error=EGL_BAD_MATCH
W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
D/NetworkSecurityConfig: No Network Security Config specified, using platform default

01/01 17:24:54: Launching app
W/System: ClassLoader referenced unknown path: /data/data/com.example.allen.myapplication/lib
E/EGL_emulation: tid 3195: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9947d420, error=EGL_BAD_MATCH
E/EGL_emulation: tid 3195: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x98d37ba0, error=EGL_BAD_MATCH
Hot swapped changes, activity restarted
W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
D/A: A
D/B: B
D/A: A
D/B: B

已经在整个Google上搜索了调试信息,但没有发现任何有用的信息,希望这不是一个愚蠢的错误。如果需要更多信息,也请通知我。

提前致谢!

尤里·费多罗夫(Yury Fedorov)

您正在尝试http://localhost/从设备或仿真器进行访问,但是实际的Web服务器在其他位置运行。因此,对于您的设备,此Web服务器不是本地主机。

要使此工作正常进行,您需要确保设备与Web服务器连接到同一网络,并且可以从设备访问Web服务器(可能存在防火墙问题等)。然后,您需要找出网络内部主机的IP地址,例如192.168.1.42,并在您的android代码中使用该IP地址:

// use your valid IP address instead
url = new URL("http://192.168.1.42/login.php");

有了此连接,设备将在您的网络中查找提供的IP,并对其进行访问(如果有)。另外,请注意,您的IP可能会更改,因此您需要弄清楚如何使其变为静态。

更多关于从Android设备访问本地主机在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章