So, I'm trying to make a login activity. It uses database from mySql so I made a php webservice 1login.php. Then I have a JSONParser class with method makeHttpRequest(url,method,params) and a LoginActivity class. But there is a problem. I can not send the params to the webservice, but when I tried with GET method, it worked(with some problem with the char '@'). I want to find out how to use the Post method. Here are the codes:
PHP: (it works well, so I don't think the problem is here)
<?php
include "0conn.php";
$email =$_POST["email"];
$heslo =$_POST["heslo"];
$pass=sha1($heslo);
$query = mysqli_query($conn,"SELECT jmeno,email FROM users WHERE email='$email' AND heslo='$pass'");
$res=array();
$response=array();
if(mysqli_num_rows($query)==1){
$result=mysqli_fetch_array($query);
$res["vysledek"]=1;
$res["email"]=$result["email"];
$res["jmeno"]=$result["jmeno"];
}
else $res["vysledek"]=0;
$response[]=$res;
mysqli_free_result($query);
echo json_encode($response);
?>
The JSONParser class:
package com.thevnkid93.ucebnice;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.R.integer;
import android.os.AsyncTask;
import android.util.Log;
public class JSONParser{
static InputStream is = null;
static JSONObject jObj = null;
static JSONArray jArr=null;
static String json = "";
// function get json from url
// by making HTTP POST or GET method
public static JSONArray makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method.equals("POST")){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method.equals("GET")){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jArr = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String (Array)
return jArr;
}
}
and the LoginActivity class:
package com.thevnkid93.ucebnice;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends Activity{
EditText e1,e2;
Button b1,b2;
List<NameValuePair>infoPost=new ArrayList<NameValuePair>();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login_layout);
e1 = (EditText)findViewById(R.id.login_e1);
e2 = (EditText)findViewById(R.id.login_e2);
b1 = (Button)findViewById(R.id.login_b1);
b2 = (Button)findViewById(R.id.login_b2);
b1.setOnClickListener(new OnClickListener(){
public void onClick(View arg0){
int vys=0;
String email=e1.getText().toString();
String heslo=e2.getText().toString();
LoadInfo loadi=new LoadInfo();
try {
vys=loadi.execute(email,heslo).get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
Toast.makeText(LoginActivity.this, "xxxxxxxx", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
Toast.makeText(LoginActivity.this, ""+vys, Toast.LENGTH_LONG).show();
}
});//TLACITKO PRIHLASENI
}
}
class LoadInfo extends AsyncTask<String, String, Integer>{
List<NameValuePair> params = new ArrayList<NameValuePair>();
@Override
protected Integer doInBackground(String... args) {
params.add(new BasicNameValuePair("email", args[0]));
params.add(new BasicNameValuePair("heslo", args[1]));
JSONArray jArray = JSONParser.makeHttpRequest(my_url, "POST", params);
int vys=0;
try {
JSONObject jobject = jArray.getJSONObject(0);
vys=jobject.getInt("vysledek");
} catch (JSONException e) {
vys=2;
e.printStackTrace();
}
return vys;
}
}
First thing first. We need a more specific information then " it just does not work"
Things you need to do.
1) Use a great tutorial. I strongly recommend this one.
2) before you check your code make sure your php works. There is a GREAT! tester called POSTman. Test your php code with it.
3) organize your classes better. you should make (like the tutorial I posted does) a useractions class that handles the web calls and calls to the JSON class you create.
with those three things you be able to debug your code and then give us a more specific problem that the community will most likely be able to assist you with.