0

Android デバイス用のアプリケーションを作成しています。このセクションの目的は、ユーザー名とパスワード (現在は文字列として割り当てられているだけ) を Web サービスに送信し、ログイン トークンを受け取ることです。コードを実行すると、getOutputStream() 行でコードが終了し、それ以上進行しません。

AndroidエミュレーターのGSMアクセスを割り当て、Eclipse内でプロキシとDNSサーバーも設定しました。どこに行けばいいのかわからない!

これは私の onHandleIntent() 内にあります。

protected void onHandleIntent(Intent i) {
    try{

        HttpURLConnection http_conn = (HttpURLConnection) new URL("http://www.XXXXX.com").openConnection();

        http_conn.setRequestMethod("POST");
        http_conn.setDoInput(true); 
        http_conn.setDoOutput(true); 
        http_conn.setRequestProperty("Content-type", "application/json; charset=utf-8"); 

        String login = URLEncoder.encode("XXXXX", "UTF-8") + "=" + URLEncoder.encode("XX", "UTF-8");
        login += "&" + URLEncoder.encode("XXXXX", "UTF-8") + "=" + URLEncoder.encode("XX", "UTF-8");



        OutputStreamWriter wr = new OutputStreamWriter(http_conn.getOutputStream());
        //TERMINATES HERE
        wr.write(login);
        wr.flush();

        BufferedReader rd = new BufferedReader(new InputStreamReader(http_conn.getInputStream()));
        String line = rd.toString();

        wr.close();
        rd.close();

        http_conn.disconnect();
        }
        catch (IOException e){
        }
}

これは私が Java を初めて使用するもので、まだ数日しか書いていないので、明らかな何かを見逃していたとしてもご容赦ください。

ありがとう

4

3 に答える 3

1

HTTP を使用して何かを POST したい場合は、HTTP POST を使用してみませんか? ;-)

スニペットの例を次に示します。

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
}

ソース: http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient

于 2012-08-02T12:22:16.627 に答える
1

これは適切な答えではないかもしれませんが、確かに役立つでしょう。このコードを使用して、要求と応答を Web サービスに送信および受信しました。

このコードは機能していますが、必要のRefactoringない追加の変数を使用したため、いくつか必要になります。

NameValuePairここを投稿に使用しました

public String postData(String url, String xmlQuery) {



        final String urlStr = url;
        final String xmlStr = xmlQuery;
        final StringBuilder sb  = new StringBuilder();


        Thread t1 = new Thread(new Runnable() {

            public void run() {

                HttpClient httpclient = new DefaultHttpClient();


                HttpPost httppost = new HttpPost(urlStr);


                try {

                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                            1);
                    nameValuePairs.add(new BasicNameValuePair("xml", xmlStr));

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                    HttpResponse response = httpclient.execute(httppost);

                    Log.d("Vivek", response.toString());

                    HttpEntity entity = response.getEntity();
                    InputStream i = entity.getContent();

                    Log.d("Vivek", i.toString());
                    InputStreamReader isr = new InputStreamReader(i);

                    BufferedReader br = new BufferedReader(isr);

                    String s = null;


                    while ((s = br.readLine()) != null) {

                        Log.d("YumZing", s);
                        sb.append(s);
                    }


                    Log.d("Check Now",sb+"");




                } catch (ClientProtocolException e) {

                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } /*
                 * catch (ParserConfigurationException e) { // TODO
                 * Auto-generated catch block e.printStackTrace(); } catch
                 * (SAXException e) { // TODO Auto-generated catch block
                 * e.printStackTrace(); }
                 */
            }

        });

        t1.start();
        try {
            t1.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        System.out.println("Getting from Post Data Method "+sb.toString());

        return sb.toString();
    }
于 2012-08-02T12:23:18.180 に答える
1
String line = rd.toString();

する必要があります

String line = rd.readLine();

それはうまくいくかもしれません。rd.toString()の文字列表現を提供しますBufferedReader。HTTP 操作をトリガーしません。私はあなたのコードをテストしていないので、他のエラーもあるかもしれません.これは明らかなエラーです.

于 2012-08-02T12:27:01.403 に答える