android - Login try and Login has leaked window -


i have login activity. problem has been driving me crazy on 2 days. when insert correct username , password, login successful. when insert wrong username or password, app freezes. think have correct dialog dismiss according search on stackoverflow main leak in circumstances login activity

package com.example.tranfer; import java.util.arraylist; import java.util.list; import org.apache.http.namevaluepair; import org.apache.http.message.basicnamevaluepair; import org.json.jsonexception; import org.json.jsonobject; import android.app.activity; import android.app.progressdialog; import android.content.intent; 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.toast;  public class login extends activity implements onclicklistener {  private edittext user, pass; private button msubmit, mregister; private string username, password;  // progress dialog private progressdialog pdialog;  // json parser class jsonparser jsonparser = new jsonparser();  // php login script location:  // localhost : // testing on device // put local ip instead, on windows, run cmd > ipconfig // or in mac's terminal type ifconfig , ip under en0 or en1 // private static final string login_url = // "http://xxx.xxx.x.x:1234/webservice/login.php";  // testing on emulator:private static final string login_url =     "http://******";  // testing real server: // private static final string login_url = // "http://www.yourdomain.com/webservice/login.php";  // json element ids response of php script: private static final string tag_success = "success"; private static final string tag_message = "message";  @override protected void oncreate(bundle savedinstancestate) {     // todo auto-generated method stub     super.oncreate(savedinstancestate);     setcontentview(r.layout.login);      // setup input fields     user = (edittext) findviewbyid(r.id.editusername);     pass = (edittext) findviewbyid(r.id.editpassword);      // setup buttons     msubmit = (button) findviewbyid(r.id.signin);     mregister = (button) findviewbyid(r.id.register);      // register listeners     msubmit.setonclicklistener(this);     mregister.setonclicklistener(this);  }  @override public void onclick(view v) {     // todo auto-generated method stub     switch (v.getid()) {      case r.id.signin:         new attemptlogin().execute();         break;     case r.id.register:         intent = new intent(this, registrationform.class);         startactivity(i);         break;      default:         break;     } }  class attemptlogin extends asynctask<string, string, string> {      /**      * before starting background thread show progress dialog      * */     boolean failure = false;      @override     protected void onpreexecute() {         super.onpreexecute();         pdialog = new progressdialog(login.this);         pdialog.setmessage("Προσπάθεια σύνδεσης...");         pdialog.setindeterminate(false);         pdialog.setcancelable(true);         pdialog.show();     }      @override     protected string doinbackground(string... args) {         // todo auto-generated method stub         // check success tag         int success;         username = user.gettext().tostring();         password = pass.gettext().tostring();         try {             // building parameters     list<namevaluepair> params = new arraylist<namevaluepair>();     params.add(new basicnamevaluepair("username", username));     params.add(new basicnamevaluepair("password", password));              log.d("request!", "starting");             // getting product details making http request     jsonobject json = jsonparser.makehttprequest(login_url, "post",                     params);              // check log 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 = new intent(login.this, mainactivity1.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 progress dialog      * **/     protected void onpostexecute(string file_url) {         // dismiss dialog once product deleted         pdialog.dismiss();         if (file_url != null) {     toast.maketext(login.this, file_url, toast.length_long).show();         }      }        }          } 

my php file

<?php  //load , connect mysql database stuff require("config.inc.php");  if (!empty($_post)) { //gets user's info based off of username. $query = "          select              id,              username,              password         users                       username = :username      ";  $query_params = array(     ':username' => $_post['username'] );  try {     $stmt   = $db->prepare($query);     $result = $stmt->execute($query_params); } catch (pdoexception $ex) {     // testing, use die , message.      //die("failed run query: " . $ex->getmessage());      //or use use 1 product json data:     $response["success"] = 0;     $response["message"] = "database error1. please try again!";     die(json_encode($response));  }  //this variable determine whether or not user's information correct. //we initialize false. $validated_info = false;  //fetching rows query $row = $stmt->fetch(); if ($row) {     //if encrypted password, unencrypt here, in our case     //compare 2 passwords     if ($_post['password'] === $row['password']) {         $login_ok = true;     } }   if ($login_ok) {     $response["success"] = 1;     $response["message"] = "login successful!";     die(json_encode($response)); } else {     $response["success"] = 0;     $response["message"] = "invalid credentials!";     die(json_encode($response)); } } else { ?>     <h1>login</h1>      <form action="login.php" method="post">          username:<br />          <input type="text" name="username" placeholder="username" />          <br /><br />          password:<br />          <input type="password" name="password" placeholder="password" value=""  />          <br /><br />          <input type="submit" value="login" />      </form>      <a href="register.php">register</a> <?php }  ?>  

logcat

05-29 22:01:23.388: e/windowmanager(24822): activity com.example.tranfer.login has leaked window com.android.internal.policy.impl.phonewindow                                            $decorview@4272a7f0 added here 05-29 22:01:23.388: e/windowmanager(24822): android.view.windowleaked: activity com.example.tranfer.login has leaked window                                             com.android.internal.policy.impl.phonewindow$decorview@4272a7f0 added here 05-29 22:01:23.388: e/windowmanager(24822):     @ android.view.viewrootimpl.<init>(viewrootimpl.java:415) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.view.windowmanagerimpl.addview(windowmanagerimpl.java:322) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.view.windowmanagerimpl.addview(windowmanagerimpl.java:234) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.view.windowmanagerimpl$compatmodewrapper.addview(windowmanagerimpl.java:153) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.view.window$localwindowmanager.addview(window.java:559) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.app.dialog.show(dialog.java:301) 05-29 22:01:23.388: e/windowmanager(24822):     @ com.example.tranfer.login$attemptlogin.onpreexecute(login.java:106) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.os.asynctask.executeonexecutor(asynctask.java:586) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.os.asynctask.execute(asynctask.java:534) 05-29 22:01:23.388: e/windowmanager(24822):     @ com.example.tranfer.login.onclick(login.java:80) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.view.view.performclick(view.java:4262) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.view.view$performclick.run(view.java:17421) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.os.handler.handlecallback(handler.java:615) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.os.handler.dispatchmessage(handler.java:92) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.os.looper.loop(looper.java:137) 05-29 22:01:23.388: e/windowmanager(24822):     @ android.app.activitythread.main(activitythread.java:4944) 05-29 22:01:23.388: e/windowmanager(24822):     @ java.lang.reflect.method.invokenative(native method) 05-29 22:01:23.388: e/windowmanager(24822):     @ java.lang.reflect.method.invoke(method.java:511) 05-29 22:01:23.388: e/windowmanager(24822):     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1038) 05-29 22:01:23.388: e/windowmanager(24822):     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:805) 05-29 22:01:23.388: e/windowmanager(24822):     @ dalvik.system.nativestart.main(native method) 

i think it's because progressdialog not close before going next activity.

change:

if (success == 1) {     log.d("login successful!", json.tostring());     intent = new intent(login.this, mainactivity1.class);     finish();     startactivity(i);     return json.getstring(tag_message); } 

to:

if (success == 1) {     pdialog.dismiss();     log.d("login successful!", json.tostring());     intent = new intent(login.this, mainactivity1.class);     finish();     startactivity(i);     return json.getstring(tag_message); } 

you should make sure pdialog.dismss(); in ondestroy() method if not null.


Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -