【发布时间】:2012-08-06 06:51:44
【问题描述】:
我正在开发一个应用程序,在该应用程序中我需要通过 POST 方法传递参数,所以我尝试使用 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);
}
【问题讨论】:
-
哪一行?请粘贴您的堆栈跟踪
-
你能在你的eclipse中试试吗
-
您可以添加任何 Connection 参数以确定您在哪个网络中请求 http 请求。看看这个链接stackoverflow.com/questions/11670246/…
-
能否根据问题给出答案。
标签: java blackberry