Reputation: 409
I´m trying connect my app with my WebServer. I dont understand what is the mistake. I prove my code for a example more easy and this had work it. thanks.
Here is my code
package com.glam;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.os.SystemClock;
import android.os.Vibrator;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.glam.custom.CustomActivity;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
/**
* The Activity Login is launched after the Home screen. You need to write your
* logic for actual Login. You also need to implement Facebook Login if
* required.
*/
public class Login extends CustomActivity
{
EditText user;
EditText pass;
Button blogin;
Httppostaux post;
String URL_connect = "http://aaaa.com/php/login.php";
boolean result_back;
private ProgressDialog pDialog;
/** The pager. */
private ViewPager pager;
/** The view that hold dots. */
private LinearLayout vDots;
/* (non-Javadoc)
* @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
//setupView();
initPager();
Button buttonFacebook=(Button)findViewById(R.id.btnFacebook);
buttonFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Login.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
});
user = (EditText) findViewById(R.id.etEmailLogin);
pass = (EditText) findViewById(R.id.etContraseñaLogin);
blogin = (Button) findViewById(R.id.btnEnviarLogin);
blogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// Extreamos datos de los EditText
String usuario = user.getText().toString();
String passw = pass.getText().toString();
// verificamos si estan en blanco
if (checklogindata(usuario, passw) == true) {
// si pasamos esa validacion ejecutamos el asynctask pasando
// el usuario y clave como parametros
new asynclogin().execute(usuario, passw);
} else {
// si detecto un error en la primera validacion vibrar y
// mostrar un Toast con un mensaje de error.
err_login();
}
}
});
}
// vibra y muestra un Toast
public void err_login() {
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(200);
Toast toast1 = Toast.makeText(getApplicationContext(),
"Error:Nombre de usuario o password incorrectos",
Toast.LENGTH_SHORT);
toast1.show();
}
/*
* Valida el estado del logueo solamente necesita como parametros el usuario
* y passw
*/
public boolean loginstatus(String username, String password) {
int logstatus = -1;
/*
* Creamos un ArrayList del tipo nombre valor para agregar los datos
* recibidos por los parametros anteriores y enviarlo mediante POST a
* nuestro sistema para relizar la validacion
*/
ArrayList<NameValuePair> postparameters2send = new ArrayList<NameValuePair>();
postparameters2send.add(new BasicNameValuePair("email", username));
postparameters2send.add(new BasicNameValuePair("clave", password));
// realizamos una peticion y como respuesta obtenes un array JSON
JSONArray jdata = post.getserverdata(postparameters2send, URL_connect);
// si lo que obtuvimos no es null
if (jdata != null && jdata.length() > 0) {
JSONObject json_data; // creamos un objeto JSON
try {
json_data = jdata.getJSONObject(0); // leemos el primer segmento
// en nuestro caso el unico
logstatus = json_data.getInt("logstatus");// accedemos al valor
Log.e("loginstatus", "logstatus= " + logstatus);// muestro por
// log que
// obtuvimos
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// validamos el valor obtenido
if (logstatus == 0) {// [{"logstatus":"0"}]
Log.e("loginstatus ", "invalido");
return false;
} else {// [{"logstatus":"1"}]
Log.e("loginstatus ", "valido");
return true;
}
} else { // json obtenido invalido verificar parte WEB.
Log.e("JSON ", "ERROR");
return false;
}
}
// validamos si no hay ningun campo en blanco
public boolean checklogindata(String username, String password) {
if (username.equals("") || password.equals("")) {
Log.e("Login ui", "checklogindata user or pass error");
return false;
} else {
return true;
}
}
/*
* CLASE ASYNCTASK
*
* usaremos esta para poder mostrar el dialogo de progreso mientras enviamos
* y obtenemos los datos podria hacerse lo mismo sin usar esto pero si el
* tiempo de respuesta es demasiado lo que podria ocurrir si la conexion es
* lenta o el servidor tarda en responder la aplicacion sera inestable.
* ademas observariamos el mensaje de que la app no responde.
*/
class asynclogin extends AsyncTask<String, String, String> {
String user, pass;
protected void onPreExecute() {
// para el progress dialog
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Autenticando....");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... params) {
// obtnemos usr y pass
user = params[0];
pass = params[1];
// enviamos y recibimos y analizamos los datos en segundo plano.
if (loginstatus(user, pass) == true) {
return "ok"; // login valido
} else {
return "err"; // login invalido
}
}
/*
* Una vez terminado doInBackground segun lo que halla ocurrido pasamos
* a la sig. activity o mostramos error
*/
protected void onPostExecute(String result) {
pDialog.dismiss();// ocultamos progess dialog.
Log.e("onPostExecute=", "" + result);
if (result.equals("ok")) {
Intent i = new Intent(Login.this, MainActivity.class);
i.putExtra("user", user);
startActivity(i);
} else {
err_login();
}
}
}
/**
* Setup the click & other events listeners for the view components of this
* screen. You can add your logic for Binding the data to TextViews and
* other views as per your need.
*/
private void setupView()
{
Button b = (Button) setTouchNClick(R.id.btnReg);
b.setText(Html.fromHtml(getString(R.string.sign_up)));
setTouchNClick(R.id.btnLogin);
setTouchNClick(R.id.btnForget);
setTouchNClick(R.id.btnFacebook);
initPager();
}
/**
* Inits the pager view.
*/
private void initPager()
{
pager = (ViewPager) findViewById(R.id.pager);
pager.setPageMargin(10);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int pos)
{
if (vDots == null || vDots.getTag() == null)
return;
((ImageView) vDots.getTag())
.setImageResource(R.drawable.dot_gray);
((ImageView) vDots.getChildAt(pos))
.setImageResource(R.drawable.dot_blue);
vDots.setTag(vDots.getChildAt(pos));
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
});
vDots = (LinearLayout) findViewById(R.id.vDots);
pager.setAdapter(new PageAdapter());
setupDotbar();
}
/**
* Setup the dotbar to show dots for pages of view pager with one dot as
* selected to represent current page position.
*/
private void setupDotbar()
{
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
param.setMargins(10, 0, 0, 0);
vDots.removeAllViews();
for (int i = 0; i < 5; i++)
{
ImageView img = new ImageView(this);
img.setImageResource(i == 0 ? R.drawable.dot_blue
: R.drawable.dot_gray);
vDots.addView(img, param);
if (i == 0)
{
vDots.setTag(img);
}
}
}
/**
* The Class PageAdapter is adapter class for ViewPager and it simply holds
* a Single image view with dummy images. You need to write logic for
* loading actual images.
*/
private class PageAdapter extends PagerAdapter
{
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount()
{
return 5;
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#instantiateItem(android.view.ViewGroup, int)
*/
@Override
public Object instantiateItem(ViewGroup container, int arg0)
{
final ImageView img = (ImageView) getLayoutInflater().inflate(
R.layout.img, null);
img.setImageResource(R.drawable.img_signin);
container.addView(img,
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT);
return img;
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#destroyItem(android.view.ViewGroup, int, java.lang.Object)
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
try
{
// super.destroyItem(container, position, object);
// if(container.getChildAt(position)!=null)
// container.removeViewAt(position);
} catch (Exception e)
{
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#isViewFromObject(android.view.View, java.lang.Object)
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
return arg0 == arg1;
}
}
/* (non-Javadoc)
* @see com.taxi.custom.CustomActivity#onClick(android.view.View)
*/
}
When I execute asynclogin().execute(usuario, passw) --> java.lang.RuntimeException is launched. LogCat
05-03 12:59:41.961 1272-1291/com.glam E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.glam, PID: 1272
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.glam.Login.loginstatus(Login.java:143)
at com.glam.Login$asynclogin.doInBackground(Login.java:224)
at com.glam.Login$asynclogin.doInBackground(Login.java:203)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
05-03 12:59:41.989 1272-1272/com.glam W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
05-03 12:59:45.805 1272-1272/com.glam E/WindowManager﹕ android.view.WindowLeaked: Activity com.glam.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{53067a18 V.E..... R......D 0,0-684,192} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:348)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at com.glam.Login$asynclogin.onPreExecute(Login.java:215)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at com.glam.Login$2.onClick(Login.java:99)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Upvotes: 0
Views: 1111
Reputation: 14408
It seems that you didn't initialize Httppostaux post;
,that cause null pointer exception at line
JSONArray jdata = post.getserverdata(postparameters2send, URL_connect);
in public boolean loginstatus(String username, String password) {
method.
Upvotes: 1