Android注册/登录不起作用

时间:2014-02-18 09:24:39

标签: android networkonmainthread

大家好,所以我按照androidhive登录/注册android系统,我添加了名字和姓氏,但出于某种原因,当我点击注册我的应用程序崩溃:(。继承人我的代码

DBConnect.php

 <?php

class DB_Connect {

    // constructor
    function __construct() {

    }

    // destructor
    function __destruct() {
        // $this->close();
    }

    // Connecting to database
    public function connect() {
        require_once 'config.php';
        // connecting to mysql
        $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        // selecting database
        mysql_select_db(DB_DATABASE);

        // return database handler
        return $con;
    }

    // Closing database connection
    public function close() {
        mysql_close();
    }

}

?>

增加: DBFunctions.php

<? db = new DB_Connect();
    $this->db->connect();
}

// destructor
function __destruct() {

}

/**
 * Storing new user
 * returns user details
 */
public function storeUser($name, $email, $password) {
    $uuid = uniqid('', true);
    $hash = $this->hashSSHA($password);
    $encrypted_password = $hash["encrypted"]; // encrypted password
    $salt = $hash["salt"]; // salt
    $result = mysql_query("INSERT INTO USERS(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())");
    // check for successful store
    if ($result) {
        // get user details
        $uid = mysql_insert_id(); // last inserted id
        $result = mysql_query("SELECT * FROM USERS WHERE uid = $uid");
        // return user details
        return mysql_fetch_array($result);
    } else {
        return false;
    }
}

/**
 * Get user by email and password
 */
public function getUserByEmailAndPassword($email, $password) {
    $result = mysql_query("SELECT * FROM USERS WHERE email = '$email'") or die(mysql_error());
    // check for result
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows > 0) {
        $result = mysql_fetch_array($result);
        $salt = $result['salt'];
        $encrypted_password = $result['encrypted_password'];
        $hash = $this->checkhashSSHA($salt, $password);
        // check for password equality
        if ($encrypted_password == $hash) {
            // user authentication details are correct
            return $result;
        }
    } else {
        // user not found
        return false;
    }
}

/**
 * Check user is existed or not
 */
public function isUserExisted($email) {
    $result = mysql_query("SELECT email from USERS WHERE email = '$email'");
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows > 0) {
        // user existed
        return true;
    } else {
        // user not existed
        return false;
    }
}

/**
 * Encrypting password
 * @param password
 * returns salt and encrypted password
 */
public function hashSSHA($password) {

    $salt = sha1(rand());
    $salt = substr($salt, 0, 10);
    $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
    $hash = array("salt" => $salt, "encrypted" => $encrypted);
    return $hash;
}

/**
 * Decrypting password
 * @param salt, password
 * returns hash string
 */
public function checkhashSSHA($salt, $password) {

    $hash = base64_encode(sha1($password . $salt, true) . $salt);

    return $hash;
}

}

&GT;

我真的很感激帮助我完全陷入困境:S

P.S:在注册了logcat down后,insta关闭了

logcat:

    02-18 21:53:14.245: D/ProgressBar(18032): setProgress = 0
02-18 21:53:14.245: D/ProgressBar(18032): setProgress = 0, fromUser = false
02-18 21:53:14.245: D/ProgressBar(18032): mProgress = 0mIndeterminate = false, mMin = 0, mMax = 10000
02-18 21:53:14.295: V/g f(18032):  f f
02-18 21:53:14.315: D/ProgressBar(18032): updateDrawableBounds: left = 0
02-18 21:53:14.315: D/ProgressBar(18032): updateDrawableBounds: top = 0
02-18 21:53:14.315: D/ProgressBar(18032): updateDrawableBounds: right = 64
02-18 21:53:14.315: D/ProgressBar(18032): updateDrawableBounds: bottom = 64
02-18 21:53:14.665: V/err(18032): {"tag":"register","success":1,"error":0,"uid":"5303acb7aa41f9.88773766","user":{"name":"yr","email":"g f ","created_at":"2014-02-18 20:55:51","updated_at":null}}
02-18 21:53:14.815: D/AndroidRuntime(18032): Shutting down VM
02-18 21:53:14.815: W/dalvikvm(18032): threadid=1: thread exiting with uncaught exception (group=0x40fbb930)
02-18 21:53:14.820: E/AndroidRuntime(18032): FATAL EXCEPTION: main
02-18 21:53:14.820: E/AndroidRuntime(18032): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.babycare/com.example.babycare.DashboardActivity}; have you declared this activity in your AndroidManifest.xml?
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1635)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1434)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.app.Activity.startActivityForResult(Activity.java:3430)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.app.Activity.startActivityForResult(Activity.java:3391)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.app.Activity.startActivity(Activity.java:3626)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.app.Activity.startActivity(Activity.java:3594)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at com.example.babycare.RegisterActivity.registerReport(RegisterActivity.java:87)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at com.example.babycare.RegisterTask.onPostExecute(RegisterTask.java:118)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at com.example.babycare.RegisterTask.onPostExecute(RegisterTask.java:1)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.os.AsyncTask.finish(AsyncTask.java:631)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.os.Looper.loop(Looper.java:137)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at android.app.ActivityThread.main(ActivityThread.java:5306)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at java.lang.reflect.Method.invokeNative(Native Method)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at java.lang.reflect.Method.invoke(Method.java:511)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
02-18 21:53:14.820: E/AndroidRuntime(18032):    at dalvik.system.NativeStart.main(Native Method)
02-18 21:53:56.860: I/Process(18032): Sending signal. PID: 18032 SIG: 9
02-18 21:53:57.435: D/dalvikvm(18161): GC_FOR_ALLOC freed 114K, 52% free 3998K/8304K, paused 11ms, total 11ms
02-18 21:53:57.485: I/dalvikvm-heap(18161): Grow heap (frag case) to 16.782MB for 9216016-byte allocation
02-18 21:53:57.500: E/dalvikvm(18161): adjustAdaptiveCoef max=8388608, min=2097152, ut=568
02-18 21:53:57.500: D/dalvikvm(18161): GC_FOR_ALLOC freed 2K, 25% free 12996K/17308K, paused 15ms, total 15ms
02-18 21:53:57.515: E/dalvikvm(18161): adjustAdaptiveCoef max=8388608, min=2097152, ut=368
02-18 21:53:57.515: D/dalvikvm(18161): GC_CONCURRENT freed <1K, 25% free 12996K/17308K, paused 2ms+1ms, total 13ms
02-18 21:53:57.640: D/dalvikvm(18161): GC_FOR_ALLOC freed 9309K, 55% free 11331K/24956K, paused 9ms, total 9ms
02-18 21:53:57.685: D/libEGL(18161): loaded /system/lib/egl/libEGL_mali.so
02-18 21:53:57.685: D/libEGL(18161): loaded /system/lib/egl/libGLESv1_CM_mali.so
02-18 21:53:57.690: D/libEGL(18161): loaded /system/lib/egl/libGLESv2_mali.so
02-18 21:53:57.690: E/(18161): Device driver API match
02-18 21:53:57.690: E/(18161): Device driver API version: 17
02-18 21:53:57.690: E/(18161): User space API version: 17 
02-18 21:53:57.690: E/(18161): mali: REVISION=Linux-r3p1-01rel1 BUILD_DATE=Fri May 10 18:36:49 KST 2013 
02-18 21:53:57.715: D/OpenGLRenderer(18161): Enabling debug mode 0

4 个答案:

答案 0 :(得分:1)

我怀疑你有NetworkOnMainThreadException。您无法在ui线程上执行与网络相关的操作。

为此目的,您应该使用ThreadAsynctask

UserFunctions你有

JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);

在JSONparser中你有

HttpResponse httpResponse = httpClient.execute(httpPost); 
// not possible on the ui thread

将http请求移至AsynctaskThread

http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:1)

稍后编辑:

对于localhost问题:我假设您使用的是模拟器,因为您使用的是localhost。如果您没有使用模拟器并且正在设备上进行测试,则必须植入设备才能使其理解本地主机(您必须能够访问主机文件)。

对于模拟器:

  1. 如果您使用eclipse作为IDE,请执行以下操作:打开DDMS透视图(右上角或Window-&gt; Open Perspective-&gt; DDMS)。在左侧面板中选择您的模拟器。在右侧面板中,选择File Explorer选项卡并导航到/ system / etc.选择hosts文件,然后单击“Pull from device”(右上角,磁盘符号)。这会将hosts文件保存到您的文件系统。编辑主机文件并添加以下行:10.0.2.2 localhost。保存文件,然后在相同的DDMS透视图中返回eclipse,选择hosts文件并选择“将文件推送到设备”(右上角的电话符号)并选择您的主机文件。

  2. 对于其他IDE(我只使用eclipse,因此我不知道他们的工具)或作为Eclipse的替代品,您可以使用ADB命令行工具。这是一个很好的教程:http://imagekarthik.wordpress.com/2012/07/16/how-to-modify-android-emulator-hosts-file/

  3. 如果还有其他问题,请发布。

    好的,所以logcat的异常应该这样读:

    “NetworkOnMainThreadException”表示您尝试从UI线程(您的活动所在的位置)通过网络获取信息。 Android禁止这样做,因为它通常是一个时间/进程/资源消耗操作,并且很可能会阻止ui线程并使用户认为应用程序没有响应。

    处理此问题的最佳方法是使用AsyncTask。可以在这里找到一个非常好的教程:http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html

    您需要做的是更改UserFunction类以使用asyncTask进行注册和登录操作。此外,来自主Activity的register按钮的onClick代码应该重构为UserFunctions类中注册函数的AsyncTask的onPostExecute代码。

    尝试理解asyncTask和Android网络操作最佳实践的概念。如果您有其他问题,请在此处发布。

答案 2 :(得分:0)

首先清除logcat:

$ adb logcat -c

然后再次运行:

$ adb logcat

现在,启动您的应用程序

当应用程序崩溃时,复制logcat输出并将其粘贴到此处。

答案 3 :(得分:0)

您应该使用asyncTask的doinbackground()在后台线程中执行与网络相关的任务

相关问题