0

データベースに接続できるかどうかを取得する小さなコードを実行しています。このようなコードがいくつかありますが、なぜこれが機能しないのかわかりません。

例外は次のとおりです。

10-24 06:09:08.362: E/Exception:(1753): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG (empty) <br>@1:7 in java.io.InputStreamReader@4176d928) 

Java コード:

private final String NAMESPACE = "http://10.0.0.47/fullexample/server.php/";
private final String URL = "http://10.0.0.47/fullexample/server.php";
/*
....
*/
private class get_connectivity extends AsyncTask<String, Integer, String> {
    @Override
    protected String doInBackground(String... params) {
        try{
            SoapObject request = new SoapObject(NAMESPACE, "can_connect");  

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

            androidHttpTransport.call(URL + "/can_connect", envelope);
            return "done";
        }catch (Exception e){
            Log.e("Exception:", e.toString());
        }
        return "not done";
    }

    @Override
    protected void onPostExecute(String result) {
        // got_connection = it's a global string variable
        got_connection = result;
    }
}

関数 can_connect (PHP Web サービス内) は次のとおりです。

function can_connect(){ 
    $host = "localhost";
    $user = "root";
    $database = "fullexampleDB";
    $pwd = "";

    $db = new mysqli($host, $user, $pwd, $database);
    if ($db->connect_errno) {
        return false;
        exit();
    }   
    $db->close();
    return true;
}

私も「できませんでした」というメッセージをいつも受け取っています。ありがとう。

4

1 に答える 1

1

SOAP はメッセージに XML を使用します。そのため、Android で応答を受信すると、SoapSerializationEnvelope オブジェクトは、それが XML であると想定して解析を試みます。Web サービスが何を返すかは完全にはわかりませんが、正しい XML 形式である必要があり、現時点ではそうではありません。

この例外 (毎回発生する) のため、常に「未完了」の結果が得られます。

この問題を解決するには、PHP サービスが正しい XML 形式で応答することを確認するか、SOAP を使用してサービスを呼び出さないでください。

于 2013-10-24T10:30:30.647 に答える