无法将 Wamp MySQL 数据库连接到 Android Studio

Posted

技术标签:

【中文标题】无法将 Wamp MySQL 数据库连接到 Android Studio【英文标题】:Unable to connect Wamp MySQL database to Android Studio 【发布时间】:2015-09-14 13:55:48 【问题描述】:

我尝试了很多不同的 IP 地址以及使用 127.0.0.0 和我自己的计算机 IP 地址,但是当我运行我的程序并尝试注册它时,它会联系服务器,然后它突然停止并说应用程序名称已停止工作。请你帮我或帮我一把,因为我在这个问题上被困了三天。

我在 wamp/www/ 文件夹中创建了一个名为 bradvisor_login_api 的文件夹,该文件夹包含三个文件,其中一个文件用于我在下面列出的 config.php 文件。 phpMyAdmin 账户没有密码,只有root用户名。

谁能帮我解决这个问题,我已经粘贴了我的 config.php 文件和一些显示连接的 java 文件。

Config.PHP 文件

<?php

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

Java 连接文件

//URL of the PHP API


   private static String loginURL = "http://192.168.0.8:80/bradvisor_login_api/";
    private static String registerURL = "http://192.168.0.8:80/bradvisor_login_api/";
    private static String forpassURL = "http://192.168.0.8:80/bradvisor_login_api/";
    private static String chgpassURL = "http://192.168.0.8:80/bradvisor_login_api/";

httpd.conf 文件

# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 0.0.0.0:80
Listen [::0]:80

错误日志

  07-02 20:02:42.163    2269-2526/com.brad.visor E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
07-02 20:02:42.163    2269-2526/com.brad.visor E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
07-02 20:02:42.194    2269-2269/com.brad.visor E/androidRuntime﹕ FATAL EXCEPTION: main
    Process: com.brad.visor, PID: 2269
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference
            at com.brad.visor.Register$ProcessRegister.onPostExecute(Register.java:232)
            at com.brad.visor.Register$ProcessRegister.onPostExecute(Register.java:189)
            at android.os.AsyncTask.finish(AsyncTask.java:636)
            at android.os.AsyncTask.access$500(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Register.java 文件:

private class ProcessRegister extends AsyncTask<String, String, JSONObject>
------------------------------------------------------------------------


        /**
         * Defining Process dialog
         **/
        private ProgressDialog pDialog;

        String email,password,fname,lname,uname;
        @Override
        protected void onPreExecute() 
            super.onPreExecute();
            inputUsername = (EditText) findViewById(R.id.uname);
            inputPassword = (EditText) findViewById(R.id.pword);
            fname = inputFirstName.getText().toString();
            lname = inputLastName.getText().toString();
            email = inputEmail.getText().toString();
            uname= inputUsername.getText().toString();
            password = inputPassword.getText().toString();
            pDialog = new ProgressDialog(Register.this);
            pDialog.setTitle("Contacting Servers");
            pDialog.setMessage("Registering ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        

        @Override
        protected JSONObject doInBackground(String... args) 

            UserFunctions userFunction = new UserFunctions();
            JSONObject json = userFunction.registerUser(fname, lname, email, uname, password);

            return json;

        
        @Override
        protected void onPostExecute(JSONObject json) 
            /**
             * Checks for success message.
             **/
            try 

if (json.getString(KEY_SUCCESS) != null) 
------------------------------------------
                    registerErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS);

                    String red = json.getString(KEY_ERROR);

                    if(Integer.parseInt(res) == 1)
                        pDialog.setTitle("Getting Data");
                        pDialog.setMessage("Loading Info");

                        registerErrorMsg.setText("Successfully Registered");

                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");

                        /**
                         * Removes all the previous data in the SQlite database
                         **/

                        UserFunctions logout = new UserFunctions();
                        logout.logoutUser(getApplicationContext());
                        db.addUser(json_user.getString(KEY_FIRSTNAME),json_user.getString(KEY_LASTNAME),json_user.getString(KEY_EMAIL),json_user.getString(KEY_USERNAME),json_user.getString(KEY_UID),json_user.getString(KEY_CREATED_AT));
                        /**
                         * Stores registered data in SQlite Database
                         * Launch Registered screen
                         **/

                        Intent registered = new Intent(getApplicationContext(), Registered.class);

                        /**
                         * Close all views before launching Registered screen
                         **/
                        registered.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        pDialog.dismiss();
                        startActivity(registered);

                        finish();
                    

                    else if (Integer.parseInt(red) ==2)
                        pDialog.dismiss();
                        registerErrorMsg.setText("User already exists");
                    
                    else if (Integer.parseInt(red) ==3)
                        pDialog.dismiss();
                        registerErrorMsg.setText("Invalid Email id");
                    
                
                else
                    pDialog.dismiss();

                    registerErrorMsg.setText("Error occured in registration");
                
             catch (JSONException e) 
                e.printStackTrace();
            
        
    public void NetAsync(View view)
        new NetCheck().execute();
    

【问题讨论】:

logcat 的错误是什么? 添加了错误目录,请帮助我。 这告诉你发生了什么。 Register.java 第 232 行是什么? htis f没有错 这个文件没有问题,但是我的数据库连接有问题。 【参考方案1】:

从您的错误日志中: “Java.lang.String 类型的值

据我从错误日志中可以看出,输入不可解析。当您收到作为 html 的响应时,似乎就是这种情况(其中 breakrow 是 指示符,但在字符串上,它们可能是多个,例如 \0。 似乎在解析时,内容被作为单个变量读取,并且无法缓冲变量中的整个响应,然后,该失败的对象变为空,并且您对其进行操作。 (因此失败,并得到记录的错误)

【讨论】:

Bonatti,我现在添加了 Register.java 文件,其中显示了两个错误,并且我已将错误文本行以粗体显示.. 请您帮忙并为我重写代码。跨度> 来自您的错误日志:警告:mysql_connect():用户'root'@'localhost'的访问被拒绝(使用密码:YES)......这意味着您正在发送用户和密码,他们错了。另外,我强烈建议使用MSQLI 连接,而不是已弃用的 msql 我没有 root 的密码,因为 mysql 的用户名是 root,密码是空白的,所以我应该在 config 中输入什么,密码部分的 php 文件是 define("DB_PASSWORD", "根”);很好,或者我应该使用define(“DB_PASSWORD”,“”);。你能建议吗?。 再次,请阅读MSQLI。 php 帮助页面将向您展示如何创建连接。您可能想单独尝试该连接(并且可能使用简单的 SELECT * FROM 'a table name here' 进行测试。发布结果)。然后在您的应用程序上,测试所需的操作。, 能否请您现在检查一下,因为我已经更改了您告诉我的内容,现在我在目录日志上遇到了不同的错误,请您提供建议。【参考方案2】:

在 Android Studio 中,您必须将 10.0.2.2 作为 IP。这是用于 localhost 连接的 ip Android Studio。

【讨论】:

以上是关于无法将 Wamp MySQL 数据库连接到 Android Studio的主要内容,如果未能解决你的问题,请参考以下文章

如果 mysql 数据库驻留在 wamp 服务器中,如何将 django 项目连接到 mysql 数据库?

如何将 Dreamweaver 连接到 1and1 上的 MySQL 数据库?

无法将MySQL Workbench连接到RDS实例

无法使用 jdbc 驱动程序连接到 mysql

无法将 MySQL Workbench 连接到 RDS 实例

WAMP:尝试连接到 mysql 时“不知道这样的主机”