2015-10-03 53 views
0

所以,我使用的是Android Studio 1.2.1.1,oKhttp 2.5.0,okio 1.6.0,我已經正確設置了依賴關係(我相信),並且我已經到處尋找我必須做一些非常簡單的事情,因爲沒有其他人似乎對此有任何疑問。參數不是使用OkHTTP for Android Studio發送的

我有一個名爲OkHttpPostHandler用下面的代碼

import android.os.AsyncTask; 

import com.squareup.okhttp.FormEncodingBuilder; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.Request; 
import com.squareup.okhttp.RequestBody; 
import com.squareup.okhttp.Response; 
import java.io.IOException; 

public class OkHttpPostHandler extends AsyncTask<String, Void, String> { 

OkHttpClient client = new OkHttpClient(); 
String varUser, varPass; 

public OkHttpPostHandler(String varUser, String varPass) { 
    this.varUser = varUser; 
    this.varPass = varPass; 
} 

@Override 
protected String doInBackground(String... params){ 
    RequestBody formBody = new FormEncodingBuilder() 
      .add("u", varUser) 
      .add("p", varPass) 
      .build(); 
    Request request = new Request.Builder() 
      .url(params[0]).post(formBody) 
      .build(); 
    try { 
     android.util.Log.w("Test", formBody.toString()); 
       Response response = client.newCall(request).execute(); 
     if (!response.isSuccessful()) 
      throw new IOException("unexpected code " + response.toString()); 
     return response.body().string(); 
    } catch (Exception e) { 
    } 
    return null; 
} 

} 

一個Java類和我有一個按鈕,它讀取兩個EditText上的意見,以獲得用戶名和密碼,然後觸發關閉HTTP調用:

@Override 
public void onClick(View bnLoginSubmit) { 
    EditText loginUsernameFont = (EditText) findViewById(R.id.evUsername); 
    EditText loginPasswordFont = (EditText) findViewById(R.id.evPassword); 

    String varUsername = loginUsernameFont.getEditableText().toString(); 
    String varPassword = loginPasswordFont.getEditableText().toString(); 
    String varPasswordHash = BCrypt.hashpw(varPassword, BCrypt.gensalt()); 

    if (varUsername.isEmpty() || varPassword.isEmpty() || varUsername.contentEquals("") || varPassword.contentEquals("")) { 
     Toast.makeText(getApplicationContext(), "Username and/or Password Cannot be Empty", 
       Toast.LENGTH_LONG).show(); 
    } else { 
     // sendPostRequest(varUsername, varPasswordHash); 
     boolean varPassCheck = BCrypt.checkpw("Password", varPasswordHash); 
     OkHttpPostHandler handler = new OkHttpPostHandler("Username_String","Password_String"); 
     String result = null; 
     try { 
      result = handler.execute("http://www.example.com").get(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
     Toast.makeText(getApplicationContext(), "PHP Response = " + result, 
       Toast.LENGTH_LONG).show(); 
    } 
} 

我認爲這個問題與我的bcrypt哈希(所以我使用手動輸入的字符串進行測試),但似乎工作得很好。這只是我的參數沒有被傳遞。如果我手動將參數輸入到URL中,它會正確返回,但我更願意能夠在此類上構建,以便將來可以動態調用。

任何人都可以看到我做錯了什麼?它必須是簡單的。任何幫助將不勝感激,因爲我努力找出問題。

+0

是你的後臺等待POST請求?你可以公開你的後端代碼嗎? –

+0

這是一個使用字符串的清理版本 <?php $ username = $ _GET ['u']; $ password = $ _GET ['p']; if($ username =='Username_String'&& $ password =='Password_String'){ echo'true'; } else { echo'username ='。 $用戶名。 '密碼='。 $密碼; } ?> – AranDG

+0

所以......這是你的問題。在你的後端,你期待一個GET請求:'$ _GET'嘗試改變爲$ _POST ...(我認爲它是PHP) –

回答

0

問題出在後端。它期待着一個GET請求。

<?php 
    $username = $_GET['u']; 
    $password = $_GET['p']; 

    if ($username=='Username_String' && $password=='Password_String') { 
     echo 'true'; 
    } else { 
     echo 'username = ' . $username . ' Password = ' . $password; 
    } 
?> 

您可以使用$ _REQUEST同時支持GET和POST請求:

<?php 
    $username = $_REQUEST['u']; // or $_POST 
    $password = $_REQUEST['p']; 

    if ($username=='Username_String' && $password=='Password_String') { 
     echo 'true'; 
    } else { 
     echo 'username = ' . $username . ' Password = ' . $password; 
    } 
?> 
+1

你是一個傳奇人物,我知道它會是簡單的東西,只是認爲它是客戶端而不是服務器。非常感謝你 – AranDG

相關問題