i want to send login infromation from my App to php url.as this my App will crash.can any one help me to slove this.
this my server login method. i want to send data to this login method..
Method [ public method login ] {
- Parameters [3] {
Parameter #0 [ $user_auth ]
Parameter #1 [ $application ]
Parameter #2 [ $name_value_list = Array ]
}
}
this is my login.java in android app
public class Login extends ActionBarActivity implements View.OnClickListener {
EditText userName, pass;
Button login;
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
private static final String LOGIN_URL = "http://crm.demo.com/service/v4_1/rest.php/login";
private static final String TAG_SUCCESS = "sucess";
private static final String TAG_MESSAGE = "message";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
userName = (EditText) findViewById(R.id.editText_userN);
pass = (EditText) findViewById(R.id.editText_pass);
login = (Button) findViewById(R.id.btn_login);
login.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("v", "Login button clicked");
new AttemptLogin().execute();
}
class AttemptLogin extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Attempting login..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
pDialog.dismiss();
}
@Override
protected String doInBackground(String... args) {
// Check for success tag
int success;
String user_auth[];
String user_name = userName.getText().toString();
String password = pass.getText().toString();
String application = "wakensys";
String name_value_list[];
String language = "en-au";
String notifyonsave = "true";
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_auth[]", user_name));
params.add(new BasicNameValuePair("user_auth[]", password));
params.add(new BasicNameValuePair("application", application));
params.add(new BasicNameValuePair("name_value_list[]", language));
params.add(new BasicNameValuePair("name_value_list[]", notifyonsave));
Log.d("request!", "starting..");
Log.i("NameValuePair", params.toString());
// getting product details by making HTTP request
JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", params);
if(json == null)
return null;
// check your log for json response
Log.d("Login attempt", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Login Successful!", json.toString());
Intent i = new Intent(Login.this, Success.class);
finish();
startActivity(i);
return json.getString(TAG_MESSAGE);
}else{
Log.d("Login Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} 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 product deleted
pDialog.dismiss();
if (file_url != null){
Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
}
--new logcat---
11-21 10:33:34.467: D/v(4400): Login button clicked
11-21 10:33:34.496: D/request!(4400): starting..
11-21 10:33:34.496: I/NameValuePair(4400): [user_auth=dghj, user_auth=ccbj, name_value_list=EN]
11-21 10:33:36.528: E/JSON Parser(4400): Error parsing data org.json.JSONException: Value <pre> of type java.lang.String cannot be converted to JSONObject
11-21 10:33:36.531: E/AndroidRuntime(4400): FATAL EXCEPTION: AsyncTask #1
11-21 10:33:36.531: E/AndroidRuntime(4400): Process: com.wakensys.sugercrm, PID: 4400
11-21 10:33:36.531: E/AndroidRuntime(4400): java.lang.RuntimeException: An error occured while executing doInBackground()
11-21 10:33:36.531: E/AndroidRuntime(4400): at android.os.AsyncTask$3.done(AsyncTask.java:300)
11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
11-21 10:33:36.531: E/AndroidRuntime(4400): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-21 10:33:36.531: E/AndroidRuntime(4400): at java.lang.Thread.run(Thread.java:818)
11-21 10:33:36.531: E/AndroidRuntime(4400): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
11-21 10:33:36.531: E/AndroidRuntime(4400): at com.wakensys.sugercrm.Login$AttemptLogin.doInBackground(Login.java:116)
11-21 10:33:36.531: E/AndroidRuntime(4400): at com.wakensys.sugercrm.Login$AttemptLogin.doInBackground(Login.java:1)
11-21 10:33:36.531: E/AndroidRuntime(4400): at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-21 10:33:36.531: E/AndroidRuntime(4400): ... 4 more
Any Help Please !!
JOSONparser.java
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(final String url) {
// Making HTTP request
try {
// Construct the client and the HTTP request.
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
// Execute the POST request and store the response locally.
HttpResponse httpResponse = httpClient.execute(httpPost);
// Extract data from the response.
HttpEntity httpEntity = httpResponse.getEntity();
// Open an inputStream with the data content.
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
// Create a BufferedReader to parse through the inputStream.
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
// Declare a string builder to help with the parsing.
StringBuilder sb = new StringBuilder();
// Declare a string to store the JSON object data in string form.
String line = null;
// Build the string until null.
while ((line = reader.readLine()) != null) {
sb.append(line + "
");
}
// Close the input stream.
is.close();
// Convert the string builder data to an actual string.
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// Try to 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 the JSON Object.
return jObj;
}
// 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();
}else 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 + "
");
}
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;
}
}
You can try your code like this, works perfect for me.
public class Login extends ActionBarActivity
{
EditText tv, tv2;
String email;
int a;
String password;
JSONParser jsonParser = new JSONParser();
private ProgressDialog dialog;
private static String register_user = "your link here";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
tv = (EditText) findViewById(R.id.editText1);
tv2 = (EditText) findViewById(R.id.editText2);
}
public void Login(View view)
{
email = tv.getText().toString().trim();
password = tv2.getText().toString();
if(TextUtils.isEmpty(email) || TextUtils.isEmpty(password))
{
if(TextUtils.isEmpty(email))
{
tv.setError("This field cannot be empty");
}
if(TextUtils.isEmpty(password))
{
tv2.setError("This field cannot be empty");
}
}
else
{
//build Params
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));
CreateNewProduct productTask = new CreateNewProduct(params);
productTask.execute();
}
}
class CreateNewProduct extends AsyncTask<String, String, JSONObject>
{
List<NameValuePair> params;
public CreateNewProduct(List<NameValuePair> params)
{
this.params = params;
}
protected void onPreExecute()
{
super.onPreExecute();
dialog = new ProgressDialog(Login.this);
dialog.setMessage("We are Logging in. Please wait . . .");
dialog.setIndeterminate(false);
dialog.setCancelable(false);
dialog.show();
}
protected JSONObject doInBackground(String... args)
{
JSONObject json = jsonParser.makeHttpRequest(register_user, "POST", this.params);
return json;
}
protected void onPostExecute(JSONObject result)
{
dialog.dismiss();
//this assumes that the response looks like this:
//{"success" : true }
String message = null;
try {
message = result.getString("message");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
boolean success = false;
try {
success = result.getBoolean("success");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(getBaseContext(), success ? "We are good to go." : "Something went wrong!",
Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), message, Toast.LENGTH_LONG).show();
}
}
}
Now according to your success value, you can take certain actions. You can also try other combinations of JSON outputs from your php script.
Try to start activity from onPostExecute instead doInBackground and no need [] in parms keys :
Note : as per your log you missing add internet permission in AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Example :
class AttemptLogin extends AsyncTask<String, String, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Attempting login..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
String user_name = userName.getText().toString();
String password = pass.getText().toString();
String application = "wakensys";
String language = "en-au";
String notifyonsave = "true";
JSONObject json=null;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_auth", user_name));
params.add(new BasicNameValuePair("user_auth", password));
params.add(new BasicNameValuePair("application", application));
params.add(new BasicNameValuePair("name_value_list", language));
params.add(new BasicNameValuePair("name_value_list", notifyonsave));
Log.d("request!", "starting..");
Log.i("NameValuePair", params.toString());
// getting product details by making HTTP request
json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", params);
// check your log for json response
Log.d("Login attempt", json.toString());
// json success tag
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(JSONObject response) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (response != null){
Toast.makeText(Login.this, response.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
if (response.getInt(TAG_SUCCESS) == 1) {
Log.d("Login Successful!", response.toString());
Intent i = new Intent(Login.this, Success.class);
startActivity(i);
finish();
}else{
Log.d("Login Failure!", response.getString(TAG_MESSAGE));
}
}
}
}
class AttemptLogin extends AsyncTask<String, String, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Attempting login..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
String user_name = userName.getText().toString();
String password = pass.getText().toString();
String application = "wakensys";
String language = "en-au";
String notifyonsave = "true";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(LOGIN_URL+ "UserAuthentication/");
deviceId = pref.getDeviceID(context);
JSONObject object = new JSONObject();
object.put("user_auth", user_name );
object.put("user_auth", password);
object.put("application", application);
object.put("name_value_list", language);
object.put("name_value_list", notifyonsave);
String dat = object.toString();
JSONObject object1 = new JSONObject();
object1.put("userAuthentication", object);
String dat1 = object1.toString();
httppost.setEntity(new StringEntity(dat1, HTTP.US_ASCII));
httppost.setHeader("Content-type", "application/json;" + HTTP.UTF_8);
HttpResponse response = httpclient.execute(httppost);
StatusLine statusLine = response.getStatusLine();
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(
content));
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line);
}
result = builder.toString();
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(JSONObject response) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (response != null){
Toast.makeText(Login.this, response.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
if (response.getInt(TAG_SUCCESS) == 1) {
Log.d("Login Successful!", response.toString());
Intent i = new Intent(Login.this, Success.class);
startActivity(i);
finish();
}else{
Log.d("Login Failure!", response.getString(TAG_MESSAGE));
}
}
}
}