0

Androidアプリケーションからデータベースに接続したいのですが、そのためのチュートリアルを見つけました(チュートリアルへのリンク)。

エミュレーターで使用しているときは正常に動作しますが、電話で使用しようとすると動作しません。ポートフォワードしたWAMPサーバーで試し、実際のWebホスト(000webhost)で試しました。エミュレーターと電話の唯一の違いはURLです。ここでは、10.0.2.2ではなくパブリックIPアドレスを指定する必要があります。また、WAMPサーバーをホストしているコンピューターのローカルIPを試してみました。一部のWebホストがコードに広告を追加することは知っていますが、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を使用してローカルホストにアクセスすると、データベースから正しいアイテムが返されますが、パブリックIPを持つサーバーのようにすべてのHTMLコードが返されるわけではありません。

アップデート2:

パブリックWAMPサーバーの問題を解決しました。私は初心者で、サーバーにパスワードを設定したことを忘れていました。

しかし、ブラウザからウェブホスト(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

ヒットしているURIがJSONではなくHTMLドキュメントを返しているようです。WebブラウザーでURIに移動するか、CURLを使用して、URIが何を返しているかを確認します。

他のいくつかが言及しているように、PHPがエラーを示しているか、Webサーバーエラー(àla404または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 に答える
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 に答える
0

エミュレーターに作業環境がある場合は、WLANを介して電話で同じことを試してください。その場合、間に追加のステップ/サーバーがないため、サーバーの応答が歪む可能性があります。

于 2012-11-18T16:32:21.137 に答える
0

このリンクを確認してください。ログインページ用です。ただし、useranmeとpasswordがMySQLに存在する場合は、phpとMySqlを使用してユーザーにログインします。このコードを実行して読むときは、自分でコーディングしてphpやmySQLで他の作業を行うことができます。テスト済みのコードです。Androidデバイスでも動作します。

jsonの助けを借りてPHP、MySqlを使用してAndroidでユーザーログインクレデンシャルを検証する方法

于 2012-11-18T18:40:40.143 に答える