1

以下のJ2MEを使用してHTTPPOSTを実行できないのは、OutputStremに書き込もうとしたときに例外をスローするコードです。

以下のコードでは、SYSOは「here5」を出力します。いくつかのガイダンスが必要です。基本的に、http接続部分を別のスレッドrunメソッドに配置して、UIスレッドから遠ざけています。

public void run(){
    HttpConnection http = null;
    OutputStream out = null;
    String msg = "lat=10&long=20&mac=923873";
    try{
    String url = "http://xxxx.php"; 
    byte[] data = null;
    InputStream istrm = null;

    http = (HttpConnection)Connector.open(url);
    }
    catch(Exception e)
    {
        System.out.println("here1");
    }
    try
    {
        http.setRequestMethod(HttpConnection.POST);
    }
    catch(Exception e)
    {
        System.out.println("here2");
    }

    try{
        http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        http.setRequestProperty("User-Agent", "HttpMidlet/0.2");
        http.setRequestProperty("Custom-Property", "MyCustomProperty/1.0; AnotherProperty/debug_0.1");

        http.setRequestProperty("Content-Length", ""+msg.getBytes().length);
    }
    catch(Exception e)
    {
        System.out.println("here3");
    }

    try{

        out = http.openOutputStream();
    }
    catch(Exception e)
    {
        System.out.println("here4");
    }
    try{
    out.write(msg.getBytes());
    out.flush();
    }
    catch(Exception e)
    {
        System.out.println("here5");
    }

}
4

3 に答える 3

1
/**
     * Send the data to the URL of Server Site using the POST connection.
     * 
     * @return the response of server.
     * @throws Exception
     */
    public byte[] send() throws Exception {
        HttpConnection hc = null;
        InputStream is = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        byte[] res = null;

        try {
            hc = (HttpConnection) Connector.open(url);

            hc.setRequestProperty("Content-Type",
                    "multipart/form-data; boundary=" + getBoundaryString());

            hc.setRequestMethod(HttpConnection.POST);



            OutputStream dout = hc.openOutputStream();

            dout.write(postBytes);
            if (dout!=null) {
                dout.close();
                dout = null;
            }

            int ch;
            is = hc.openInputStream();

            while ((ch = is.read()) != -1) {
                bos.write(ch);
            }
            res = bos.toByteArray();
        } catch (Exception e) {
            // if an error occurred connecting to the server.
            throw new Exception(e.getMessage());

        } finally {
            try {
                if (bos != null)
                    bos.close();

                if (is != null)
                    is.close();

                if (hc != null)
                    hc.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return res;
    }
于 2012-08-15T16:13:01.513 に答える
0

このNokia SamplesetRequestPropertyによると、メソッドを呼び出す必要はありません。

もう 1 つの興味深い点は、 の使い方です。Connector.open(urlstring, Connector.READ_WRITE)

于 2012-08-14T20:03:34.540 に答える