0

POST メソッドを介してパラメーターを渡す必要がある 1 つのアプリケーションを開発しているので、実装しようとしましHTTPConnectionたが、エラーが発生しました。これらは接続を確立していません。このコードでは、パラメーターを渡していますがURLEncodedPostData、できません

ここに私のコードがあります::

URLEncodedPostData postData = new URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET, false);
                    //passing q’s value and ie’s value
                    postData.append("q", "remoQte");
                    postData.append("ie", "UTF-8");

                    ConnectionFactory conFactory = new ConnectionFactory();
                    ConnectionDescriptor conDesc = null;
                    try{
                        conDesc = conFactory.getConnection("http://www.google.co.in/search");
                    }catch(Exception e){
                        System.out.println(e.toString()+":"+e.getMessage());
                    }
                    String response = ""; // this variable used for the server response
                    // if we can get the connection descriptor from ConnectionFactory
                    if(null != conDesc){
                        try{
                            HttpConnection connection = (HttpConnection)conDesc.getConnection();
                            //set the header property
                            connection.setRequestMethod(HttpConnection.POST);
                            connection.setRequestProperty("Content-Length", Integer.toString(postData.size())); //body content of post data
                            connection.setRequestProperty("Connection", "close"); // close the connection after success sending request and receiving response from the server
                            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // we set the content of this request as application/x-www-form-urlencoded, because the post data is encoded as form-urlencoded(if you print the post data string, it will be like this -> q=remoQte&ie=UTF-8).

                            //now it is time to write the post data into OutputStream
                            OutputStream out = connection.openOutputStream();
                            out.write(postData.getBytes());
                            out.flush();
                            out.close();

                            int responseCode = connection.getResponseCode(); //when this code is called, the post data request will be send to server, and after that we can read the response from the server if the response code is 200 (HTTP OK).
                            if(responseCode == HttpConnection.HTTP_OK){
                                //read the response from the server, if the response is ascii character, you can use this following code, otherwise, you must use array of byte instead of String
                                InputStream in = connection.openInputStream();
                                StringBuffer buf = new StringBuffer();
                                int read = -1;
                                while((read = in.read())!= -1)
                                    buf.append((char)read);
                                response = buf.toString();
                            }
                            Dialog.alert("response"+  response);

                            //don’t forget to close the connection
                            connection.close();

                        }catch(Exception e){
                            System.out.println(e.toString()+":"+e.getMessage());
                        }
                    }

アップデート::

import java.io.IOException;

import javax.microedition.io.HttpConnection;

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.container.MainScreen;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;
import org.xmlpull.v1.XmlPullParserException;

public class UiMainscreen extends MainScreen {
    ButtonField loginButton;
     private static final String TAG_CONTACTS = "contacts";
     private static final String TAG_ID = "id";
     private static final String TAG_NAME = "name";
     private static final String TAG_EMAIL = "email";
     private static final String TAG_ADDRESS = "address";
     private static final String TAG_GENDER = "gender";
     private static final String TAG_PHONE = "phone";
     private static final String TAG_PHONE_MOBILE = "mobile";
     private static final String TAG_PHONE_HOME = "home";
     private static final String TAG_PHONE_OFFICE = "office";
    public UiMainscreen() {


        final ButtonField b=new ButtonField("JSON");
        add(b);

        FieldChangeListener listener=new FieldChangeListener() {
            public void fieldChanged(Field field, int context) {
                if(field==b){

                    try{    
                    String URL = "http://www.google.co.in/";
                    String METHOD_NAME = "search";
                    String NAMESPACE = "http://tempuri.org/";
                    String SOAP_ACTION = NAMESPACE+METHOD_NAME;

                   SoapObject resultRequestSOAP = null;
                   HttpConnection httpConn = null;
                   HttpTransport httpt;
                   SoapPrimitive response = null;
                   SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                   request.addProperty("q", "remoQte");
                   request.addProperty("ie", "UTF-8");
                   System.out.println("The request is=======" + request.toString());
                   SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                   envelope.dotNet = true;
                   envelope.setOutputSoapObject(request);

                   httpt = new HttpTransport(URL);
                   httpt.debug = true;
                   try
                   {
                       httpt.call(SOAP_ACTION, envelope);
                       response = (SoapPrimitive) envelope.getResponse();
                       String result =  response.toString();
                       resultRequestSOAP = (SoapObject) envelope.bodyIn;
}
                   catch (IOException e) {
                       // TODO Auto-generated catch block
                       System.out.println("The exception is IO==" + e.getMessage());
                   } catch (XmlPullParserException e) {

                       // TODO Auto-generated catch block
                       System.out.println("The exception xml parser example==="
                               + e.getMessage());
                   }
                   System.out.println( resultRequestSOAP);
                   Dialog.alert("resultRequestSOAP"+resultRequestSOAP);
                    }catch (Exception e) {
                         System.out.println("Problem==="
                                   + e.getMessage());
                    }
            }}
        };
        b.setChangeListener(listener);



    }
4

2 に答える 2

1

「接続が確立されていません」とは、デバイスが選択したトランスポートでサーバーに接続できないことを意味します。この回答を確認してください: Blackberry デバイスでインターネットに接続できませんか?

接続が確立されたら、パラメーターの受け渡しとデータ交換に関する Sarah の投稿が役立つはずです。

于 2012-08-06T07:52:54.507 に答える
1

接続にいくつかのパラメーターを投稿したいので、おそらく次のことが役立つかもしれません。

String URL = "http://xxx.xxx.com/xxx/xxx.asmx";
String METHOD_NAME = yourMethodName;
String NAMESPACE = "http://tempuri.org/";
String SOAP_ACTION = NAMESPACE+METHOD_NAME;
SoapObject resultRequestSOAP = null;
HttpConnection httpConn = null;
HttpTransport httpt;
SoapPrimitive response = null;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("username", user_id);
request.addProperty("password", password);
System.out.println("The request is=======" + request.toString());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
httpt = new HttpTransport(URL+C0NNECTION_EXTENSION);
httpt.debug = true;
try
{
    httpt.call(SOAP_ACTION, envelope);
    response = (SoapPrimitive) envelope.getResponse();
    String result =  response.toString();
    resultRequestSOAP = (SoapObject) envelope.bodyIn;
}
catch (IOException e) 
{
    System.out.println("The exception is IO==" + e.getMessage());
} 
catch (XmlPullParserException e) 
{
    System.out.println("The exception xml parser example==="
    + e.getMessage());
}
System.out.println( resultRequestSOAP);
return response + "";

これは、2 つのパラメーターを Web サービスに渡しています。ユーザー名とパスワード。それに応じて変更できます。Connection Extention は、接続の種類を指定する部分です。BES、WIFIなど。シミュレーターの場合は、として追加できますconnectionString = ";deviceside=true"これは、 Properties -> Java Build Path -> Libraryを介してプロジェクトに追加できる Ksoap2 ライブラリを利用します。

于 2012-08-06T07:14:00.730 に答える