0

我想从我的 android 应用程序连接到数据库,并找到了一个教程(链接到教程)。

当我在模拟器中使用它时它工作正常,但当我尝试在我的手机上使用它时却不行。我尝试过使用 WAMP 服务器进行端口转发,并且尝试过使用真正的网络主机(000webhost)。模拟器与手机的唯一区别是 URL,我必须提供公共 IP 地址而不是 10.0.2.2。我也尝试过使用托管 WAMP 服务器的计算机的本地 IP。我知道一些网络主机会在代码中添加广告,但我很确定 WAMP 不会这样做。

当我使用手机时,我从 LogCat 收到以下错误:

Error parsing data org.json.JSONException: Value <html> of type java.lang.String cannot be converted to JSONObject

更新1:

我尝试使用 cURL 检查返回的内容。它返回很多(标题、bgcolor 等),但我认为这很有趣:

Access denied for user 'root'@'localhost' (using password: NO) in C:\wamp\www\android_connect\db_connect.php on line <i>28</i></th></tr>

它似乎无法访问数据库,但我可能错了?

当我使用 cURL 访问 localhost 时,它会从数据库中返回正确的项目,而不是像具有公共 IP 的服务器那样返回所有 html 代码。

更新 2:

我解决了公共 WAMP 服务器的问题。我是个菜鸟,忘记了我用密码设置了服务器。

但是当我从浏览器使用 webhost (000webhost) 时,我仍然收到此错误:

PHP Error Message

Warning: require_once(__DIR__/db_connect.php) [function.require-once]: failed to open stream: No such file or directory in /home/a7471305/public_html/android_connect/get_all_products.php on line 12

Free Web Hosting

PHP Error Message

Fatal error: require_once() [function.require]: Failed opening required '__DIR__/db_connect.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/a7471305/public_html/android_connect/get_all_products.php on line 12

Free Web Hosting

我从 cURL 得到这个错误:

<b>Fatal error</b>:  require_once() [<a href='function.require'>function.require
</a>]: Failed opening required '__DIR__/db_connect.php' (include_path='.:/usr/li
b/php:/usr/local/lib/php') in <b>/home/a7471305/public_html/android_connect/get_
all_products.php</b> on line <b>12</b><br />

如何解决这个问题?

4

4 回答 4

1

我找到了解决方案。感谢所有帮助过我的人。

网络主机找不到该文件,因为我正在使用

require_once( __DIR__ . '/db_connect.php');

在同一文件夹中查找下一个 php 文件。相反,我应该使用:

define('__ROOT__', dirname(dirname(__FILE__))); 
require_once(__ROOT__.'/android_connect/db_connect.php'); 
于 2012-11-19T17:35:51.967 回答
1

看起来您正在点击的 URI 正在返回 HTML 文档而不是 JSON。在 Web 浏览器中导航到 URI 或使用 CURL 查看它返回的内容。

正如其他几个人所提到的,PHP 可能会显示错误,或者您可能会收到 Web 服务器错误(à la 404 或 500)。

一些免费的网络主机会在 HTML 响应中注入广告,这可能会导致调试和生产之间的差异。您可能希望将 Response-Type 标头设置为 application/json 这可能会避免任何干预。

前任:

// This must go before any output has started, I.E. at the 
// beginning of the first loaded document
header('Content-type: application/json');
于 2012-11-18T16:21:35.300 回答
0

当您在模拟器中有一个工作环境时,请尝试通过 WLAN 对您的手机进行相同操作。那么您之间就没有其他步骤/服务器,这可能会扭曲您的服务器响应。

于 2012-11-18T16:32:21.137 回答
0

检查此链接。它用于登录页面。但是如果用户名和密码在 MySQL 中存在,它使用 php 和 MySql 来登录用户。当您将运行此代码并阅读它时,您可以自己编写代码以使用 php 和 mySQL 进行其他工作。它是经过测试的代码。它也适用于安卓设备。

如何在 json 的帮助下使用 PHP、MySql 在 android 中验证用户登录凭据

于 2012-11-18T18:40:40.143 回答