【问题标题】:Android localhost errorAndroid 本地主机错误
【发布时间】:2014-11-02 14:09:55
【问题描述】:

我正试图让这个项目在我的开发电脑上运行。 但是当我尝试注册新用户时,这是 logcat 抛出的错误(附件是会话的 logcat 错误日志)

这是我正在学习的教程,

http://www.androidhive.info/2012/01/android-login-and-registration-with-php-mysql-and-sqlite/

       11-03 11:56:24.685: D/dalvikvm(2279): GC_FOR_ALLOC freed 206K, 9% free 3763K/4096K, paused 2ms, total 6ms
11-03 11:56:24.925: E/JSON(2279): <br />
11-03 11:56:24.925: E/JSON(2279): <font size='1'><table class='xdebug-error xe-deprecated' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
11-03 11:56:24.925: E/JSON(2279): <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\wamp\www\ah_login_api\include\DB_Connect.php on line <i>18</i></th></tr>
11-03 11:56:24.925: E/JSON(2279): <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
11-03 11:56:24.925: E/JSON(2279): <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
11-03 11:56:24.925: E/JSON(2279): <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>252816</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\ah_login_api\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>0</td></tr>
11-03 11:56:24.925: E/JSON(2279): <tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>276616</td><td bgcolor='#eeeeec'>DB_Functions->__construct(  )</td><td title='C:\wamp\www\ah_login_api\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>19</td></tr>
11-03 11:56:24.925: E/JSON(2279): <tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>282712</td><td bgcolor='#eeeeec'>DB_Connect->connect(  )</td><td title='C:\wamp\www\ah_login_api\include\DB_Functions.php' bgcolor='#eeeeec'>..\DB_Functions.php<b>:</b>13</td></tr>
11-03 11:56:24.925: E/JSON(2279): <tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0010</td><td bgcolor='#eeeeec' align='right'>283528</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.mysql-connect' target='_new'>mysql_connect</a>
11-03 11:56:24.925: E/JSON(2279): (  )</td><td title='C:\wamp\www\ah_login_api\include\DB_Connect.php' bgcolor='#eeeeec'>..\DB_Connect.php<b>:</b>18</td></tr>
11-03 11:56:24.925: E/JSON(2279): </table></font>
11-03 11:56:24.925: E/JSON(2279): {"tag":"register","success":1,"error":0,"uid":"5457b44f108d33.70669064","user":{"name":"fdgdf","email":"dfgfd@gmail.com","created_at":"2014-11-04 00:58:55","updated_at":null}}
11-03 11:56:24.925: E/JSON Parser(2279): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
11-03 11:56:24.935: D/AndroidRuntime(2279): Shutting down VM
11-03 11:56:24.935: W/dalvikvm(2279): threadid=1: thread exiting with uncaught exception (group=0xb2d12b20)
11-03 11:56:24.935: E/AndroidRuntime(2279): FATAL EXCEPTION: main
11-03 11:56:24.935: E/AndroidRuntime(2279): Process: com.example.androidhive, PID: 2279
11-03 11:56:24.935: E/AndroidRuntime(2279): java.lang.NullPointerException
11-03 11:56:24.935: E/AndroidRuntime(2279):     at com.example.androidhive.RegisterActivity$1.onClick(RegisterActivity.java:66)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at android.view.View.performClick(View.java:4438)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at android.view.View$PerformClick.run(View.java:18422)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at android.os.Handler.handleCallback(Handler.java:733)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at android.os.Handler.dispatchMessage(Handler.java:95)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at android.os.Looper.loop(Looper.java:136)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at android.app.ActivityThread.main(ActivityThread.java:5017)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at java.lang.reflect.Method.invokeNative(Native Method)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at java.lang.reflect.Method.invoke(Method.java:515)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-03 11:56:24.935: E/AndroidRuntime(2279):     at dalvik.system.NativeStart.main(Native Method)

我错过了什么?顺便说一句,我已经创建了所有必要的数据库并输入了用户和密码。 只是补充一点,当我试图访问我通过本地主机从上述站点下载的 index.php 时,它表示该网页不可用,尽管我相信它只是作为 JSON 的起点而不是实际上的索引页面..如果我错了,请纠正我。

【问题讨论】:

  • 看看“caused by”——它是日志猫中最重要的东西。您在 onClick 上获得 NullPointerException。请发布您的 onClick 代码。
  • 错误出现在您尝试打开的链接中。 Tt 显示某些错误消息。链接的输出不是 json 字符串。请在浏览器中查看此链接。
  • 读取错误! mysql_connect():C:\wamp\www\ah_login_api\include\DB_Connect.php 中用户 'root'@'localhost'(使用密码:NO)的访问被拒绝
  • 抱歉不能早点回来。所以我纠正了这一点,但仍然面临问题。请在我的原始问题中查看上面编辑过的日志
  • "localhost" 指的是 android 设备本身,因为它只能指运行程序的机器。

标签: android sdk android-developer-api


【解决方案1】:

由于输入格式错误,您的 JSONObject.getJSONObject(String) 调用会引发 JSONException


让代码静默继续

使用 JSONObject.optJSONObject(String) 应该改为返回 null 而不是失败。然后,您可以将 null 值作为特殊情况处理。这将比您当前的行为更可取,因为应用程序应该尽可能对错误输入保持沉默,并且应该失败。

想象一下,网络上有一个强制网络门户,要求用户登录或同意条款。由于输入格式错误,这样的示例会导致您的应用在当前状态下崩溃。

来自任何不受信任来源的无效数据(包括共享存储上的任何文件,或来自几乎任何网络连接的数据)被认为是预期的,并且在检测到无效数据时不应触发高于 DEBUG 级别的任何日志记录 (即便如此,日志记录也应该尽可能地受到限制)。

Google 来自 Log Sparingly (Code Style Guidelines for Contributors)


修复服务器的输出

由于这是一个开发环境,并且您还控制着服务器端代码,因此您还需要修复服务器输出。您的配置当前正在尝试以 root 用户身份连接到本地计算机,但没有(谢天谢地)无效的密码。

你想要:

  • 切换到其他受限访问用户(推荐)
  • 设置 root 用户的密码(出于安全考虑,建议不要使用)

【讨论】:

  • 你认为我应该在哪里做呢?这一次我也没有输入空值。
  • 对不起,当你问在哪里做某事时,你指的是哪一部分?
  • 你在我下载项目的问题中从上面给出的链接中提到“使用 JSONObject.optJSONObject(String) 应该返回 null 而不是失败”的部分,我应该在哪里处理这个异常?
  • RegisterActivity 的第 66 行你有冒犯的JSONObject json_user = json.getJSONObject("user");,这就是现在失败的原因。我正在谈论将那里的get 更改为opt 并在此之后处理可能的空值。
  • 现在根据博文中的日志,您在解析JSON时出现异常,然后抛出NPE,导致应用程序崩溃。解析问题是由于您的服务器输出有关在页面上使用已弃用功能的警告而发生的。如果你要解决这个问题,解析问题就会消失。请在浏览器中打开 API 端点/站点以查看完整的警告。
猜你喜欢
  • 2016-07-29
  • 2012-11-03
  • 1970-01-01
  • 2013-08-14
  • 2014-06-07
  • 2018-06-27
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多