Передача пост-переменных из Java-приложения для Android в php-файл для запроса базы данных

Я создаю приложение для Android, которое имеет экран входа в систему. Пользователь должен ввести свой адрес электронной почты и пароль. При нажатии кнопки входа в систему мой код должен отправить введенное имя пользователя и пароль в php-файл, используя переменные post. Предполагается, что php-файл использует переменные, отправленные из приложения, для завершения оператора select и возвращает результаты из базы данных на сервере, если есть совпадения.
При запуске приложения вывод, возвращаемый из файла php, будет пустым.
Я не знаю, правильно ли отправляются переменные post в php-файл, я искал по всему интернету, но не могу понять, как работает эта концепция.

Ниже мой код:

package com.example.csqa;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.os.AsyncTask;
import android.widget.TextView;
import android.widget.Toast;

public class AsyncHttpPost extends AsyncTask<String, String, String> {
TextView t;
MainActivity ma;
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();

public AsyncHttpPost(MainActivity m, List<NameValuePair> nvp){
ma = m;
nameValuePair = nvp;
}
@Override
protected String doInBackground(String... params) {
byte[] result = null;
String str = "";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL

try {
post.setEntity(new UrlEncodedFormEntity(nameValuePair));
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
result = EntityUtils.toByteArray(response.getEntity());
str = new String(result, "UTF-8");
}

}
catch (UnsupportedEncodingException e) {

e.printStackTrace();

}
catch (Exception e) {

}
return str;
}
@Override
protected void onPostExecute(String output) {
// do something with the string returned earlier
Toast.makeText(ma.getApplicationContext(), "Calling validateUser with " + output, Toast.LENGTH_SHORT).show();
ma.validateUser(output);
}

}

Вот скрипт PHP

<?php
$con=mysqli_connect("127.0.0.1","S831987","831987",'D831987");
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$email = $_POST['email'];
$password = $_POST['password'];
$result = mysqli_query($con,"SELECT * FROM USERS where
EMAIL='$email' and PASSWORD ='$password'");
$row = mysqli_fetch_array($result);
$data = $row[0];
if($data){
echo $data;
}
mysqli_close($con);
?>

Вот код, который выполняется из основного действия, когда пользователь нажимает кнопку входа в систему:

public void btnLoginClicked(View v){
TextView em = (TextView) findViewById(R.id.tvLogEmail);
TextView pw = (TextView) findViewById(R.id.tvLogPassword);
String email = em.getText().toString();
String password = pw.getText().toString();
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("email", email));
nameValuePair.add(new BasicNameValuePair("password", password));
AsyncHttpPost async = new AsyncHttpPost(this, nameValuePair);
async.execute("http://lamp.ms.wits.ac.za/~831987/isValidLogin.php");
}

Может ли кто-нибудь понять, почему я получаю пустой ответ?
Я проверил SQL-запрос как есть, с правильными переменными, и он работает правильно.
Заранее спасибо!

2

Решение

Почему бы не использовать ServiceHandler с объектом json? Вот как это работает для меня:

private class AsyncHttpPost extends AsyncTask<String, Void, Void> {

ProgressDialog progressDialog;

@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(getActivity(), "", "checking email and password...");
}

@Override
protected Void doInBackground(String... arg) {
String mEmail = arg[0]; // email entered by user
String mPassword = arg[1] // password entered by user

// Preparing post params
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", mEmail));
params.add(new BasicNameValuePair("password", mPassword));

ServiceHandler serviceClient = new ServiceHandler();
String json = serviceClient.makeServiceCall(YOUR_URL, ServiceHandler.POST, params);

Log.d("SERVER Request: ", "> " + json);

if (json != null) {
try {
JSONObject jsonObj = new JSONObject(json);
boolean error = jsonObj.getBoolean("error");
// checking for error node in json
if (!error) {
// username and password checked successfully
} else {
Log.e("Server Error: ", "> " + jsonObj.getString("message"));
}

} catch (JSONException e) {
e.printStackTrace();
}

} else {
Log.e("JSON Data", "JSON data error!");
}
return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progressDialog.dismiss();
}
}

Кредиты:

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]