无法重定向到MainActivity屏幕

I am just a newbie and I have build up my application to start with a layout named user_login.xml. When I click on the login button, however it is unable to redirect me to the activity_main.xml. The json should works fine. What should I do in order to solve this? Sorry if I used wrong words to explain my problem. Thanks in advance. Here is the Android Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.alan.smarthome"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application
        android:name="com.alan.smarthome.app.AppController"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat" >
        <activity
            android:name="com.alan.smarthome.UserLogin"
            android:launchMode="singleTop"
            android:windowSoftInputMode="adjustPan" 
            android:label="@string/app_name">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".RegisterActivity"
                  android:label="Register New Account"
                  android:launchMode="singleTop"
                  android:windowSoftInputMode="adjustPan"/>
        <activity android:name=".MainActivity"
                  android:label="@string/app_name" 
                  android:launchMode="singleTop"/>

    </application>

</manifest>

And this is the UserLogin.java that I have created

package com.alan.smarthome;


import com.alan.smarthome.app.AppConfig;
import com.alan.smarthome.app.AppController;
import com.alan.smarthome.helper.SessionManager;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;  
import android.app.ProgressDialog;
import android.util.Log;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.content.Intent;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;


public class UserLogin extends Activity {

        // LogCat tag
        private static final String TAG = RegisterActivity.class.getSimpleName();
        private Button btnLogin;
        private TextView btnLinkToRegister;
        private EditText inputUsername;
        private EditText inputPassword;
        private ProgressDialog pDialog;
        private SessionManager session;
        /*
        private TextView attempts;
        int counter = 3; */ 

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.user_login);


                inputUsername = (EditText) findViewById(R.id.btnUsername);
                inputPassword = (EditText) findViewById(R.id.btnPassword);
                btnLogin = (Button) findViewById(R.id.btnLogin);
                btnLinkToRegister = (TextView) findViewById(R.id.btnLinkToRegisterScreen);

                // Progress dialog
                pDialog = new ProgressDialog(this);
                pDialog.setCancelable(false);

                // Session manager
                session = new SessionManager(getApplicationContext());

                // Check if user is already logged in or not
                if (session.isLoggedIn()) {
                    // User is already logged in. Take him to main activity
                    Intent intent = new Intent(UserLogin.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                }


          // Login button Click Event
          btnLogin.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                        String name = inputUsername.getText().toString();
                        String password = inputPassword.getText().toString();

                        // Check for empty data in the form
                        if (name.trim().length() > 0 && password.trim().length() > 0) {
                            // login user
                            checkLogin(name, password);
                        } else {
                            // Prompt user to enter credentials
                            Toast.makeText(getApplicationContext(),
                                    "Please enter the credentials!", Toast.LENGTH_LONG)
                                    .show();
                        }
                }
          });

          // Link to Register Screen
          btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

                public void onClick(View view) {
                    Intent i = new Intent(getApplicationContext(),
                            RegisterActivity.class);
                    startActivity(i);
                    finish();
                }
            });

        }


        /**
         * function to verify login details in mysql db
         * */
        private void checkLogin(final String name, final String password) {
            // Tag used to cancel the request
            String tag_string_req = "req_login";

            pDialog.setMessage("Logging in ...");
            showDialog();

            StringRequest strReq = new StringRequest(Method.POST,
                    AppConfig.URL_REGISTER, new Response.Listener<String>() {

                        @Override
                        public void onResponse(String response) {
                            Log.d(TAG, "Login Response: " + response.toString());
                            hideDialog();

                            try {
                                JSONObject jObj = new JSONObject(response.substring(response.indexOf("{"), response.lastIndexOf("}") + 1));
                                boolean error = jObj.getBoolean("error");

                                // Check for error node in json
                                if (!error) {
                                    // user successfully logged in
                                    // Create login session
                                    session.setLogin(true);

                                    // Launch main activity                     
                                    Intent intent = new Intent(UserLogin.this,
                                                    MainActivity.class);
                                    startActivity(intent);
                                    finish();
                                } else {
                                    // Error in login. Get the error message
                                    String errorMsg = jObj.getString("error_msg");
                                    Toast.makeText(getApplicationContext(),errorMsg, Toast.LENGTH_LONG).show();


                                }
                            } catch (JSONException e) {
                                // JSON error
                                e.printStackTrace();
                            }

                        }
                    }, new Response.ErrorListener() {

                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e(TAG, "Login Error: " + error.getMessage());
                            Toast.makeText(getApplicationContext(),
                                    error.getMessage(), Toast.LENGTH_LONG).show();
                            hideDialog();
                        }
                    }) {

                        @Override
                        protected Map<String, String> getParams() {
                            // Posting parameters to login url
                            Map<String, String> params = new HashMap<String, String>();
                            params.put("tag", "login");
                            params.put("name", name);
                            params.put("password", password);

                            return params;
                        }

                    };

            // Adding request to request queue
            AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
        }

        private void showDialog() {
            if (!pDialog.isShowing())
                pDialog.show();
        }

        private void hideDialog() {
            if (pDialog.isShowing())
                pDialog.dismiss();
        }

    }

And this is the error I get from LogCat when I try to login to the activity_main.xml

03-09 16:53:13.975: W/System.err(783): org.json.JSONException: Expected ':' after main at character 6 of {main}(  )</td><td title='C:\wamp\www\android_login_api\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>0</td></tr>
03-09 16:53:13.975: W/System.err(783): <tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>279456</td><td bgcolor='#eeeeec'>DB_Functions->__construct(  )</td><td title='C:\wamp\www\android_login_api\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>19</td></tr>
03-09 16:53:13.975: W/System.err(783): <tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0020</td><td bgcolor='#eeeeec' align='right'>285592</td><td bgcolor='#eeeeec'>DB_Connect->connect(  )</td><td title='C:\wamp\www\android_login_api\include\DB_Functions.php' bgcolor='#eeeeec'>..\DB_Functions.php<b>:</b>13</td></tr>
03-09 16:53:13.985: W/System.err(783): <tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0020</td><td bgcolor='#eeeeec' align='right'>286432</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.mysql-connect' target='_new'>mysql_connect</a>
03-09 16:53:13.985: W/System.err(783): (  )</td><td title='C:\wamp\www\android_login_api\include\DB_Connect.php' bgcolor='#eeeeec'>..\DB_Connect.php<b>:</b>18</td></tr>
03-09 16:53:13.985: W/System.err(783): </table></font>
03-09 16:53:13.985: W/System.err(783): {"tag":"login","error":false,"uid":"54fdd87267a3f5.49630793","user":{"name":"Alan","email":"alan@hotmail.com","created_at":"2015-03-10 01:29:22","updated_at":null}}
03-09 16:53:13.985: W/System.err(783):  at org.json.JSONTokener.syntaxError(JSONTokener.java:450)
03-09 16:53:13.985: W/System.err(783):  at org.json.JSONTokener.readObject(JSONTokener.java:379)
03-09 16:53:13.985: W/System.err(783):  at org.json.JSONTokener.nextValue(JSONTokener.java:100)
03-09 16:53:13.995: W/System.err(783):  at org.json.JSONObject.<init>(JSONObject.java:155)
03-09 16:53:13.995: W/System.err(783):  at org.json.JSONObject.<init>(JSONObject.java:172)
03-09 16:53:13.995: W/System.err(783):  at com.alan.smarthome.UserLogin$3.onResponse(UserLogin.java:129)
03-09 16:53:13.995: W/System.err(783):  at com.alan.smarthome.UserLogin$3.onResponse(UserLogin.java:1)
03-09 16:53:13.995: W/System.err(783):  at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
03-09 16:53:13.995: W/System.err(783):  at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
03-09 16:53:13.995: W/System.err(783):  at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
03-09 16:53:13.995: W/System.err(783):  at android.os.Handler.handleCallback(Handler.java:733)
03-09 16:53:13.995: W/System.err(783):  at android.os.Handler.dispatchMessage(Handler.java:95)
03-09 16:53:13.995: W/System.err(783):  at android.os.Looper.loop(Looper.java:136)
03-09 16:53:13.995: W/System.err(783):  at android.app.ActivityThread.main(ActivityThread.java:5017)
03-09 16:53:13.995: W/System.err(783):  at java.lang.reflect.Method.invokeNative(Native Method)
03-09 16:53:13.995: W/System.err(783):  at java.lang.reflect.Method.invoke(Method.java:515)
03-09 16:53:13.995: W/System.err(783):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-09 16:53:13.995: W/System.err(783):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-09 16:53:13.995: W/System.err(783):  at dalvik.system.NativeStart.main(Native Method)

And the php files:

DB_Connect.php

<?php
class DB_Connect {

    // constructor
    function __construct() {

    }

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

    // Connecting to database
    public function connect() {
        require_once 'include/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();
    }

}

?>

config.php

<?php

    /**
     * Database config variables
     */
    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "android_api");
    ?>

DB_Functions.php

<?php

class DB_Functions {

    private $db;

    //put your code here
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // connecting to database
        $this->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 name and password
     */
    public function getUserByNameAndPassword($name, $password) {
        $result = mysql_query("SELECT * FROM users WHERE name = '$name'") 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($name) {
        $result = mysql_query("SELECT name from users WHERE name = '$name'");
        $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;
    }

}

?>

Index.php

<?php

/**
 * File to handle all API requests
 * Accepts GET and POST
 * Each request will be identified by TAG
 * Response will be JSON data

  /**
 * check for POST request 
 */
if (isset($_POST['tag']) && $_POST['tag'] != '') {
    // get tag
    $tag = $_POST['tag'];

    // include db handler
    require_once 'include/DB_Functions.php';
    $db = new DB_Functions();

    // response Array
    $response = array("tag" => $tag, "error" => FALSE);

    // check for tag type
    if ($tag == 'login') {
        // Request type is check Login
        $name = $_POST['name'];
        $password = $_POST['password'];

        // check for user
        $user = $db->getUserByNameAndPassword($name, $password);
        if ($user != false) {
            // user found
            $response["error"] = FALSE;
            $response["uid"] = $user["unique_id"];
            $response["user"]["name"] = $user["name"];
            $response["user"]["email"] = $user["email"];
            $response["user"]["created_at"] = $user["created_at"];
            $response["user"]["updated_at"] = $user["updated_at"];
            echo json_encode($response);
        } else {
            // user not found
            // echo json with error = 1
            $response["error"] = TRUE;
            $response["error_msg"] = "Incorrect name or password!";
            echo json_encode($response);
        }
    } else if ($tag == 'register') {
        // Request type is Register new user
        $name = $_POST['name'];
        $email = $_POST['email'];
        $password = $_POST['password'];

        // check if user is already existed
        if ($db->isUserExisted($email)) {
            // user is already existed - error response
            $response["error"] = TRUE;
            $response["error_msg"] = "User already existed";
            echo json_encode($response);
        } else {
            // store user
            $user = $db->storeUser($name, $email, $password);
            if ($user) {
                // user stored successfully
                $response["error"] = FALSE;
                $response["uid"] = $user["unique_id"];
                $response["user"]["name"] = $user["name"];
                $response["user"]["email"] = $user["email"];
                $response["user"]["created_at"] = $user["created_at"];
                $response["user"]["updated_at"] = $user["updated_at"];
                echo json_encode($response);
            } else {
                // user failed to store
                $response["error"] = TRUE;
                $response["error_msg"] = "Error occured in Registration";
                echo json_encode($response);
            }
        }
    } else {
        // user failed to store
        $response["error"] = TRUE;
        $response["error_msg"] = "Unknow 'tag' value. It should be either 'login' or 'register'";
        echo json_encode($response);
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Required parameter 'tag' is missing!";
    echo json_encode($response);
}
?>
duancilan5124
duancilan5124 对不起,我仍然在寻找json格式时感到困惑...我该怎么做才能显示json格式?
5 年多之前 回复
douxiexie3574
douxiexie3574 请包含您尝试解析响应的json格式。
5 年多之前 回复

4个回答

org.json.JSONException: Expected ':'after main at character 6 of...

Clearly you are not receiving a valid JSON response (it looks like HTML).

This part:

03-09 16:53:13.985: W/System.err(783): 40.0020286432http://www.php.net/function.mysql-connect' target='_new'>mysql_connect 03-09 16:53:13.985: W/System.err(783): ( )..\DB_Connect.php:18

Suggest that you need to fix errors in your PHP script, also you should log the error, and if you need to send it in json format

douzuan2814
douzuan2814 我有一个名为DB_Funtions的php文件,允许用户注册并创建一个帐户,然后通过用户名和密码登录。 同时我的index.php将接受GET和POST以及JSON数据中的响应。 我再次上​​传了这两个文件。 问题应该来自这两个文件,但我仍然无法弄明白。 请帮我。
5 年多之前 回复
douyin7416
douyin7416 展示你如何使用该类并解释为什么响应中有HTML,它应该只是json
5 年多之前 回复
dsymx68408
dsymx68408 我已经检查过php脚本,但我仍然找不到任何错误...我已经上传了php文件。
5 年多之前 回复

Please double check first the API backend of your app for some errors.

To parse complex Json hierarchies. Try to use this library: https://code.google.com/p/google-gson/

Sample Usage:

Create first an object where you want to insert the json string. Note: the variable names should match your json tags, or you should put @SerializedName("firstname"); at the beginning of a variable.

public class UserDto implements Serializable {

    private long _id;
    private String id;
    private String fname;
    private String lname;
    private String emp_code;
    private String username;
    private String password;
    private String usertype;


    public long get_id() {
        return _id;
    }

    public void set_id(long _id) {
        this._id = _id;
    }

    public String getUserId() {
        return id;
    }

    public void setUserId(String id) {
        this.id = id;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public String getEmp_code() {
        return emp_code;
    }

    public void setEmp_code(String emp_code) {
        this.emp_code = emp_code;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsertype() {
        return usertype;
    }

    public void setUsertype(String usertype) {
        this.usertype = usertype;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }  
}

Here's How to parse the JSON String:

Gson gson = new Gson();
UserDto userDto= gson.fromJson(stringJsonHere, UserDto.class);



您的响应字符串是json本身。
尝试在logcat中显示响应字符串。
而不是这样:</ p>

  JSONObject jObj = new JSONObject(response.substring(response.indexOf(“{”),response.lastIndexOf(“}”)+ 1)); 
</ code> </ pre>

试试这个:</ p>

  JSONObject jObj = new JSONObject(response); 
</ code> </ pre>
</ div>

展开原文

原文

Your response string is json itself. Try showning response string in logcat. Instead of this:

 JSONObject jObj = new JSONObject(response.substring(response.indexOf("{"), response.lastIndexOf("}") + 1));

Try this:

JSONObject jObj = new JSONObject(response);

doujiyong7604
doujiyong7604 我最初使用它,但它给了我这样的错误:org.json.JSONException:java.lang.String类型的值<br不能转换为JSONObject。
5 年多之前 回复



检查您的web服务器设置是否为php。 PHP错误报告将您的index.php转换为html而不是json。 </ p>


  1. 编辑php.ini并设置error_reporting设置。 将其关闭</ p> </ li>

  2. 如果您使用.htaccess文件,请插入php_flag display_errors 0 </ p> </ li>

  3. 您可以添加< index.php上的代码> error_reporting(0)</ code> </ p> </ li>
    </ ol>

    请同时检查Web服务器中的mysql php设置。 错误报告显示它是由mysql_connect()触发的。</ p>
    </ div>

展开原文

原文

Check your web server setting for php. PHP error reporting turn your index.php to html instead json.

  1. Edit your php.ini and set error_reporting settings. Set it off

  2. If you use .htaccess file, insert php_flag display_errors 0

  3. You can add error_reporting(0) on top of index.php

Please also check your mysql php settings in web server. Error report show that it was triggered by mysql_connect().

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐