2015-10-03 3 views
0

Итак, я использую Android Studio 1.2.1.1, oKhttp 2.5.0, okio 1.6.0, я правильно установил зависимости (я полагаю), и я повсюду выглядел так, я должен делать что-то очень простое неправильно, поскольку никто другой, похоже, не имеет проблемы с этим.Параметры, которые не отправляются с использованием OkHTTP для Android Studio

У меня есть класс Java под названием 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; 
} 

} 

И у меня есть кнопка, которая считывает два вида 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

Вот очищенная версия, используя только строки 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