2017-01-01 23 views
0

我是新来的Android和我试图让与Android HTTP POST和PHP一个简单的登录测试,虽然我无法用下面的代码发送帖子:未能从机器人发送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 

是否已经搜索调试全谷歌,但没有发现任何有用的东西,希望它不是这是一个愚蠢的错误。如果需要更多信息,请通知我。

在此先感谢!

+0

您是否收到任何错误? –

+0

当这种情况发生时,你能捕获logcat并发布吗? –

+0

在内部添加了一些log.d的日志,希望能够清楚说明 –

回答

1

您正试图从您的设备或模拟器访问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设备访问本地主机的更多信息here

+0

这正是问题所在,感谢您的帮助! –