Quote:
Originally Posted by Durgm
Hi Myself Durg
I am newbie in BlackBerry development. I want to connect my application from internet. My code is
HttpConnection code:
Code:
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
//import javax.microedition.io.*;
import java.io.OutputStream;
//import java.util.*;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
public class HttpCommunicationHandler
{
HttpCommunicationHandler()
{
}
/**
* This method retrieves the data from the server using HTTP POST.
*/
public String getDataFromServerThroughPost(String getUrl, String urlData)
{
HttpConnection httpConn = null;
InputStream is = null;
OutputStream out = null;
String httpUrl = getUrl;
String paramsToBeSend = urlData;
String dataRead = "";
try {
httpConn = (HttpConnection) Connector.open(httpUrl);
httpConn.setRequestMethod(HttpConnection.POST);
httpConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
httpConn.setRequestProperty("Content-Length", Integer.toString(paramsToBeSend.length()));
out = httpConn.openOutputStream();
out.write(paramsToBeSend.getBytes());
if (out != null)
out.close();
if ((httpConn.getResponseCode() == HttpConnection.HTTP_OK))
{
int length = (int) httpConn.getLength();
is = httpConn.openInputStream();
if (length == -1)
{
int chunkSize = 1024;
byte[] data = new byte[chunkSize];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int dataSizeRead = 0;// size of data read from input stream.
// keeps track of total size of data read upto now.
int totalDataSizeRead = 0;
while ((dataSizeRead = is.read(data)) != -1)
{
baos.write(data, 0, dataSizeRead);
}
dataRead = new String(baos.toByteArray());
baos.close();
}
else {
byte[] data = new byte[length];
// try to read all the bytes returned from the server.
is.read(data);
// dis.readFully(data);
dataRead = new String(data);
//if (data != null)
//data = null;
}
}
else {
// UIController.showErrorAlert("Network Error",
// "Error in communicating with the server.", d);
//System.out.println("Network Error","Error in communicating with the server.");
}
}
catch (IOException e)
{
String str ="hello";
//System.out.println("Network Error","Error in communicating with the server.", "OK", null);
}
// Since only limited number of network objects can be in open state
// it is necessary to clean them up as soon as we are done with them.
// Networking done. Clean up the network objects
finally {
try
{
if (is != null)
is.close();
}
catch (IOException e)
{
}
try
{
if (httpConn != null)
httpConn.close();
}
catch (IOException e)
{
//System.out.println("Exception occured " + t.toString());
}
}
return dataRead;
}
}
and I use this class in to my loginclass. I am sending the login and password and match after that want to print the success message.
LoginScreen code: want to generate action on click login button
Code:
try{
String datafrom = "";
HttpCommunicationHandler http = new HttpCommunicationHandler();
String getUrl =" my url";
String urlData ="?requestStr=<UserInfo><UserID>ravi</UserID><Password>kant</Password><LoginDate></LoginDate><IPAddress></IPAddress></UserInfo>";
datafrom = http.getDataFromServerThroughPost(getUrl,urlData);
System.out.println("value of datafrom"+datafrom);
}
catch(Throwable t){
}
When I click on the login button my app freeze.Please help me . its very urgent. Is there any permisson to set for network connection?
Thanks
Durg
|
This belongs in the developer forum. Please read the sticky threads there.
HTTP connection activity, particularly reading from the InputStream must be done on a separate thread. If you try to do it on the event thread, when the read blocks the whole device freezes as you have noted.