【问题标题】:Parameters not being sent using OkHTTP for Android Studio未使用 OkHTTP for Android Studio 发送参数
【发布时间】:2015-12-31 18:45:38
【问题描述】:

所以,我使用的是 Android Studio 1.2.1.1、oKhttp 2.5.0、okio 1.6.0,我已经正确设置了依赖项(我相信),而且我到处查看,所以我必须做一些非常简单的错误,因为似乎没有其他人对此有任何疑问。

我有一个名为 OkHttpPostHandler 的 Java 类,代码如下

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

}

我有一个按钮,它读取两个 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 中手动输入参数,它会正确返回,但我希望能够在此类上进行构建,以便将来调用时可以动态使用。

谁能看到我做错了什么?它必须是简单的。任何帮助将不胜感激,因为我正在努力找出问题。

【问题讨论】:

  • 您的后端是否在等待 POST 请求?你能公开你的后端代码吗?
  • 这是一个仅使用字符串的清理版本
  • 所以...有你的问题。在您的后端,您期待一个 GET 请求:$_GET 尝试更改为 $_POST...(我认为是在 PHP 中)
  • 但是当我更改 URL 以显式包含参数时,即 www.example.com/login.php?u=Username_String&p=Password_String 它工作正常,如果是这样,这不会解决错误案子?无论如何我都会尝试一下,如果有效,请告诉您,顺便感谢您的快速回复
  • 如果我使用 POST 变量根本不会被拾取,它只是将变量返回为 null

标签: java android okhttp okio


【解决方案1】:

问题出在后端。它期待一个 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; 
    } 
?>

【讨论】:

  • 你是个传奇,我知道这会很简单,只是认为它是客户端而不是服务器。非常感谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2015-07-24
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
相关资源
最近更新 更多