PDA

Ver la Versión Completa : problema login


rafaxplayer
04/08/14, 16:42:02
saludos compañeros estoy intentando hacer un sistema de login desde un dispositivo a mi foro php , el caso es que via navegador la url que paso funciona bien pero desde android me tira errores , este es el código:

public class MainActivity extends Activity {
TextView tx;
EditText user, pass;
Button but;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tx = (TextView) findViewById(R.id.textView1);
user = (EditText) findViewById(R.id.editText1);
pass = (EditText) findViewById(R.id.editText2);
but = (Button) findViewById(R.id.button1);
but.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
connect();

}
});

}

public void connect() {

try {
String us = URLEncoder.encode(user.getText().toString(), "UTF-8");
String passw = URLEncoder
.encode(pass.getText().toString(), "UTF-8");
String url = String
.format("http://www.mipaginaweb.com/login.php?username=%s&password=%s",
us, passw);

postLoginData();

} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}

}

public void postLoginData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();

/* login.php returns true if username and password is equal to saranga */
HttpPost httppost = new HttpPost(
"http://www.amsspecialist.com/login.php");

try {
// Add user name and password

String username = user.getText().toString();

String password = pass.getText().toString();

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", username));
nameValuePairs.add(new BasicNameValuePair("password", password));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Execute HTTP Post Request
Log.w("SENCIDE", "Execute HTTP Post Request");
HttpResponse response = httpclient.execute(httppost);

String str = convertInputStreamToString(
response.getEntity().getContent()).toString();
Log.w("SENCIDE", str);


tx.setText(str.toString());


} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private static String convertInputStreamToString(InputStream inputStream)
throws IOException {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));
String line = "";
String result = "";
while ((line = bufferedReader.readLine()) != null)
result += line;

inputStream.close();
return result;

}
}

y este el logcat con el error

08-04 16:39:27.730: D/memalloc(15364): /dev/pmem: Mapped buffer base:0x51727000 size:2580480 offset:1966080 fd:46
08-04 16:39:28.400: D/memalloc(15364): /dev/pmem: Mapped buffer base:0x51b4d000 size:3194880 offset:2580480 fd:49
08-04 16:39:28.520: D/memalloc(15364): /dev/pmem: Mapped buffer base:0x51fd9000 size:1474560 offset:860160 fd:52
08-04 16:39:30.120: W/SENCIDE(15364): Execute HTTP Post Request
08-04 16:39:30.180: W/dalvikvm(15364): threadid=1: thread exiting with uncaught exception (group=0x40da51f8)
08-04 16:39:30.200: E/AndroidRuntime(15364): FATAL EXCEPTION: main
08-04 16:39:30.200: E/AndroidRuntime(15364): android.os.NetworkOnMainThreadException
08-04 16:39:30.200: E/AndroidRuntime(15364): at android.os.StrictMode$AndroidBlockGuardPolicy.onNe twork(StrictMode.java:1099)
08-04 16:39:30.200: E/AndroidRuntime(15364): at java.net.InetAddress.lookupHostByName(InetAddress. java:426)
08-04 16:39:30.200: E/AndroidRuntime(15364): at java.net.InetAddress.getAllByNameImpl(InetAddress. java:277)
08-04 16:39:30.200: E/AndroidRuntime(15364): at java.net.InetAddress.getAllByName(InetAddress.java :251)
08-04 16:39:30.200: E/AndroidRuntime(15364): at org.apache.http.impl.conn.DefaultClientConnectionO perator.openConnection(DefaultClientConnectionOper ator.java:137)
08-04 16:39:30.200: E/AndroidRuntime(15364): at org.apache.http.impl.conn.AbstractPoolEntry.open(A bstractPoolEntry.java:164)
08-04 16:39:30.200: E/AndroidRuntime(15364): at org.apache.http.impl.conn.AbstractPooledConnAdapte r.open(AbstractPooledConnAdapter.java:119)
08-04 16:39:30.200: E/AndroidRuntime(15364): at org.apache.http.impl.client.DefaultRequestDirector .execute(DefaultRequestDirector.java:360)
08-04 16:39:30.200: E/AndroidRuntime(15364): at org.apache.http.impl.client.AbstractHttpClient.exe cute(AbstractHttpClient.java:555)
08-04 16:39:30.200: E/AndroidRuntime(15364): at org.apache.http.impl.client.AbstractHttpClient.exe cute(AbstractHttpClient.java:487)
08-04 16:39:30.200: E/AndroidRuntime(15364): at org.apache.http.impl.client.AbstractHttpClient.exe cute(AbstractHttpClient.java:465)
08-04 16:39:30.200: E/AndroidRuntime(15364): at com.example.login_prueva.MainActivity.postLoginDat a(MainActivity.java:94)
08-04 16:39:30.200: E/AndroidRuntime(15364): at com.example.login_prueva.MainActivity.connect(Main Activity.java:64)
08-04 16:39:30.200: E/AndroidRuntime(15364): at com.example.login_prueva.MainActivity$1.onClick(Ma inActivity.java:47)
08-04 16:39:30.200: E/AndroidRuntime(15364): at android.view.View.performClick(View.java:3524)
08-04 16:39:30.200: E/AndroidRuntime(15364): at android.view.View$PerformClick.run(View.java:14194 )
08-04 16:39:30.200: E/AndroidRuntime(15364): at android.os.Handler.handleCallback(Handler.java:605 )
08-04 16:39:30.200: E/AndroidRuntime(15364): at android.os.Handler.dispatchMessage(Handler.java:92 )
08-04 16:39:30.200: E/AndroidRuntime(15364): at android.os.Looper.loop(Looper.java:137)
08-04 16:39:30.200: E/AndroidRuntime(15364): at android.app.ActivityThread.main(ActivityThread.jav a:4476)
08-04 16:39:30.200: E/AndroidRuntime(15364): at java.lang.reflect.Method.invokeNative(Native Method)
08-04 16:39:30.200: E/AndroidRuntime(15364): at java.lang.reflect.Method.invoke(Method.java:511)
08-04 16:39:30.200: E/AndroidRuntime(15364): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:816)
08-04 16:39:30.200: E/AndroidRuntime(15364): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:583)
08-04 16:39:30.200: E/AndroidRuntime(15364): at dalvik.system.NativeStart.main(Native Method)


no se que estoy haciendo mal , los permisos de internet en el manifest ya estan.

mocelet
04/08/14, 17:03:32
Solo con poner el nombre de la excepción en google (android.os.NetworkOnMainThreadException) te sale la respuesta.

También se ha comentado por aquí alguna vez, el acceso a la red tiene que hacerse desde otro hilo (una AsyncTask por ejemplo) para no bloquear el hilo principal de ejecución de Android y de la app.

rafaxplayer
04/08/14, 18:56:19
ok, gracias solucionado