I am creating a login activity that need connection between Android
and PHP MySQL
so I used AsyncTask
and JSON
but the problem is that the system force clause and display in the logCat errors. Can anyone help me to fix this error?
This is line 124 : Log.d("Single person Details", json.toString());
.
log cat
02-03 14:24:54.668: E/AndroidRuntime(1588): FATAL EXCEPTION: AsyncTask #3
02-03 14:24:54.668: E/AndroidRuntime(1588): java.lang.RuntimeException: An error occured while executing doInBackground()
02-03 14:24:54.668: E/AndroidRuntime(1588): at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-03 14:24:54.668: E/AndroidRuntime(1588): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
02-03 14:24:54.668: E/AndroidRuntime(1588): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
02-03 14:24:54.668: E/AndroidRuntime(1588): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
02-03 14:24:54.668: E/AndroidRuntime(1588): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-03 14:24:54.668: E/AndroidRuntime(1588): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-03 14:24:54.668: E/AndroidRuntime(1588): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-03 14:24:54.668: E/AndroidRuntime(1588): at java.lang.Thread.run(Thread.java:841)
02-03 14:24:54.668: E/AndroidRuntime(1588): Caused by: java.lang.NullPointerException
02-03 14:24:54.668: E/AndroidRuntime(1588): at pack.coderzheaven.AndroidPHPConnectionDemo$CheckLogin.doInBackground(AndroidPHPConnectionDemo.java:124)
02-03 14:24:54.668: E/AndroidRuntime(1588): at pack.coderzheaven.AndroidPHPConnectionDemo$CheckLogin.doInBackground(AndroidPHPConnectionDemo.java:1)
02-03 14:24:54.668: E/AndroidRuntime(1588): at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-03 14:24:54.668: E/AndroidRuntime(1588): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-03 14:24:54.668: E/AndroidRuntime(1588): ... 4 more
02-03 14:24:55.008: E/JSON Parser(1588): Error parsing data org.json.JSONException: Value You of type java.lang.String cannot be converted to JSONObject
JSONParser.java
package pack.coderzheaven;
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.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.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
/*
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
*/
if(method == "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 {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
AndroidPHPConnectionDemo.java
package pack.coderzheaven;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class AndroidPHPConnectionDemo extends Activity {
Button b;
EditText et, pass;
String Username, Password;
TextView tv;
HttpPost httppost;
StringBuffer buffer;
HttpResponse response;
HttpClient httpclient;
List<NameValuePair> nameValuePairs;
String pid;
// Progress Dialog
private ProgressDialog pDialog;
// JSON parser class
JSONParser jsonParser = new JSONParser();
// single person url
// ******************************************************************
// the localhost in the genymotion emulator = 10.0.3.2
// ******************************************************************
private static final String url_check_login = "http://10.0.3.2/check.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PERSON = "person";
private static final String TAG_PID = "pid";
private static final String TAG_NAME = "username";
private static final String TAG_pass = "password";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b = (Button) findViewById(R.id.Button01);
et = (EditText) findViewById(R.id.username);
pass = (EditText) findViewById(R.id.password);
tv = (TextView) findViewById(R.id.tv);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// login();
// Getting complete person details in background thread
new CheckLogin().execute();
}
});
}
/**
* Background Async Task to Get complete person details
* */
class CheckLogin extends AsyncTask<String, String, String> {
JSONArray productObj;
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(AndroidPHPConnectionDemo.this);
pDialog.setMessage("Loading person details. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Getting person details in background thread
* */
@Override
protected String doInBackground(String... arg0) {
// updating UI from Background Thread
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid", pid));
// getting person details by making HTTP request
// Note that person details url will use GET request
JSONObject json = jsonParser.makeHttpRequest(url_check_login,
"GET", params);
// check your log for json response
Log.d("Single person Details", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received person details
productObj = json.getJSONArray(TAG_PERSON); // JSON Array
JSONObject
}
else {
// product with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
if (productObj != null) {
try {
// get first product object from JSON Array
JSONObject person = productObj.getJSONObject(0);
et.setText(person.getString(TAG_NAME));
pass.setText(person.getString(TAG_pass));
Log.e("success in login", "SUCCESS IN LOGIN");
} catch (Exception e) {
e.printStackTrace();
}
}
pDialog.dismiss();
}
}
}
check.php
<?php
require_once('db_config.php');
// array for JSON response
$response = array();
//if(isset($_GET['Username'])and isset($_POST['Password'])){
if(isset($_GET['pid'])){
// $username = $_POST['Username'];
// $password = $_POST['Password'];
$pid = $_GET['pid'];
// $query_search = "select username, password from members where username = '".$username."' AND password = '".$password. "'";
$query_search = "select from members where pid = '".$pid."'";
$query_exec = mysql_query($query_search) or die(mysql_error());
if (mysql_num_rows($query_exec) > 0)
{
$result = mysql_fetch_array($query_exec);
$person = array();
$person['username']=$result[username];
$person['password']=$result['password'];
// success
$response["success"] = 1;
// user node
$response["person"] = array();
array_push($response["person"], $person);
// echoing JSON response
echo json_encode($response);
}
else
{
// no user found
$response["success"] = 0;
$response["message"] = "No User found";
// echo no users JSON
echo json_encode($response);
}
}
else
{
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>