1

BlackBerry OS < 7.X アプリケーションからサーバーに json 文字列を送信しようとしています。HTTP Post リクエストを使用しようとしています。私がこれまでに行ったことは次のとおりです。

String httpURL = "http://ip_of_my_server/phpServer/receiver2.php/" + jsonString;

try {
    HttpConnection httpConn;
    httpConn = (HttpConnection) Connector.open(httpURL + getConnectionString());
    httpConn.setRequestMethod(HttpConnection.POST);
    httpConn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
    DataOutputStream _outStream = new DataOutputStream(httpConn.openDataOutputStream());
    byte[] request_body = httpURL.getBytes();
    for (int i = 0; i < request_body.length; i++) {
        _outStream.writeByte(request_body[i]);
    }
    DataInputStream _inputStream = new DataInputStream(httpConn.openInputStream());
    StringBuffer _responseMessage = new StringBuffer();
    int ch;
    while ((ch = _inputStream.read()) != -1) {
        _responseMessage.append((char) ch);
    }
    String res = (_responseMessage.toString());
    String response = res.trim();
    System.out.println("!!!!!!!!!!!!!! Response is: " + response);
    httpConn.close();
} catch (Exception e) {
    Dialog.alert("Error - " + e.toString());
}

コードは、私が完全に理解していない方法で動作します。上記のコードの作成者はhttpURL、サーバー + my json 文字列の URL として使用することを提案しました。最終的な結果は、私のサーバーでは、json 文字列が到着する代わりに、次のような文字列が到着することです。

http://ip_of_my_server/phpServer/receiver2.php/ + jsonString

私はJavaに精通していません。以前に WP7 と iOS でこれを行ったことがありhttpUrl、サーバーの URL を入力してから、コマンドを使用して json 文字列を http 要求に「追加」し、すべてが期待どおりに機能しました。

サーバーにJSON文字列のみが到着するように、URLに追加するのではなく、上記の HttpRequest にjson文字列を追加するにはどうすればよいですか?

EDIT (使用された残りのコードを提供する)


//used to specify connection type ( wifi - 3g - etc )
public static String getConnectionString() {
    String connectionString = null;
    // Wifi is the preferred transmission method
    if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) {
        connectionString = ";interface=wifi";
    }
    // Is the carrier network the only way to connect?
    else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT) {
        String carrierUid = getCarrierBIBSUid();
        if (carrierUid == null) {
            // Has carrier coverage, but not BIBS. So use the carrier's TCP network
            connectionString = ";deviceside=true";
        } else {
            // otherwise, use the Uid to construct a valid carrier BIBS request
            connectionString = ";deviceside=false;connectionUID="+carrierUid + ";ConnectionType=mds-public";
        }
    }
    // Check for an MDS connection instead (BlackBerry Enterprise Server)
    else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS) {
        connectionString = ";deviceside=false";
    }
    // If there is no connection available abort to avoid hassling the user unnecessarily
    else if (CoverageInfo.getCoverageStatus() == CoverageInfo.COVERAGE_NONE) {
        connectionString = "none";
    }
    // In theory, all bases are covered by now so this shouldn't be reachable.But hey, just in case ...
    else {
        connectionString = ";deviceside=true";
    }
    System.out.println("!!!!!!!!!!!!!! Connection type is: " + connectionString);
    return connectionString;
    }

/**
 * Looks through the phone's service book for a carrier provided BIBS
 * network
 * 
 * @return The uid used to connect to that network.
 */
private synchronized static String getCarrierBIBSUid() {
    ServiceRecord[] records = ServiceBook.getSB().getRecords();
    int currentRecord;

    for (currentRecord = 0; currentRecord < records.length; currentRecord++) {
        if (records[currentRecord].getCid().toLowerCase().equals("ippp")) {
            if (records[currentRecord].getName().toLowerCase()
                    .indexOf("bibs") >= 0) {
                return records[currentRecord].getUid();
            }
        }
    }

    return null;
}
4

1 に答える 1