0

よし、C# コードの http 投稿は機能する (関数は を返しますTRUE。これは、応答文字列が " OK" であることを意味します。次のとおりです。

public bool Rank(int rank)
    {
                    System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
        string postData = "";
        InvokeOnMainThread(delegate(){
        postData="pass=somePass&request=someRequest&access_key="+((FBTabBarController)TabBarController).AAMAccessKey+"&pid="+place_id+"&rank="+rank.ToString();
        });
byte[]  data = encoding.GetBytes(postData);

                HttpWebRequest myRequest =
            (HttpWebRequest)WebRequest.Create("someURL");
myRequest.Method = "POST";
myRequest.ContentType="application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
Stream newStream=myRequest.GetRequestStream();
// Send the data.
newStream.Write(data,0,data.Length);
newStream.Close();
        HttpWebResponse hwr =(HttpWebResponse) myRequest.GetResponse();
        StreamReader reader = new StreamReader(hwr.GetResponseStream());
        string res = reader.ReadToEnd();
        if(res=="OK") 
            return true;}
        else if(res == "FAILED") return false;

        return false;
    }

そして、ここに動作していない JAVA コードがあります (関数はFALSE上記のコードと同じパラメーターを返します。応答文字列は次のとおりです: NULL:

   public boolean SubmitRank(String URL) 
    {
        HttpClient httpclient = new DefaultHttpClient();   
        HttpPost httppost = new HttpPost(URL); 
            // Add your data   

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5); 
            Log.d("MyTag","id: " + place_id + "rank: " + rank);
            nameValuePairs.add(new BasicNameValuePair("pass","somePass"));
            nameValuePairs.add(new BasicNameValuePair("request","someRequest"));
            nameValuePairs.add(new BasicNameValuePair("accesskey",shareAppPreferences.getAccessKey()));
            nameValuePairs.add(new BasicNameValuePair("pid",place_id));
            nameValuePairs.add(new BasicNameValuePair("rank",rank));

            try {
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));
                    try {
                       HttpResponse response = httpclient.execute(httppost);
                        String resString = EntityUtils.toString(response.getEntity());

                        if(resString.equals("OK")){
                            return true;
                        }
                        else if(resString.equals("FAILED")){
                            return false;
                        }
                        return false;
                    } catch (ClientProtocolException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            return false;
    }

C# コードが機能しているのに Java コードが機能しないのはなぜですか? 上記のリクエストで不足しているものはありますか?

4

1 に答える 1

1

返される HTTP ステータス コードは何ですか? メソッドで取得できますresponse.getStatusLine().getStatusCode()。これは、リクエストがサーバーに送信されるなど、考えられる問題を特定するのに役立ちます。

それ以外の場合、Java コードで HTTP 要求を作成して送信する方法は正しく有効に見えます。

于 2012-11-20T00:32:10.170 に答える