【问题标题】:Unable to connect Wamp MySQL database to Android Studio无法将 Wamp MySQL 数据库连接到 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没有错
  • 这个文件没有问题,但是我的数据库连接有问题。

标签: java php android phpmyadmin wamp


【解决方案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。

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2022-06-17
    • 1970-01-01
    • 2020-08-02
    • 2017-02-24
    • 2014-12-06
    • 1970-01-01
    • 2020-03-30
    • 2013-04-14
    相关资源
    最近更新 更多