2017-01-01 39 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

這正是問題所在,感謝您的幫助! –