Reputation: 349
I am sending value through using HTTP-post but an exception occur my code is as:-
public static InputStream SendDetails(String senderEmail,String senderName,String senderPhone,String comment )
{
if(item != null)
{
url = constants.STATEURL + item.getListingid().toString()+"/contact";//?access_token=0|V1CALGARY|e98984a4c954fa1d78e3be626ad81a1d&mode=map";
}
else if(itemsavedfromdb != null)
{
url = constants.STATEURL + itemsavedfromdb.getListingid().toString()+"/contact";//?access_token=0|V1CALGARY|e98984a4c954fa1d78e3be626ad81a1d&mode=map";
}
else if(itemrecentfromdb != null)
{
url = constants.STATEURL + itemrecentfromdb.getListingid().toString()+"/contact";//?access_token=0|V1CALGARY|e98984a4c954fa1d78e3be626ad81a1d&mode=map";
}
List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
nameValuePairs.add(new BasicNameValuePair("access_token",constants.accesstokenstate));
nameValuePairs.add(new BasicNameValuePair("mode","map"));
nameValuePairs.add(new BasicNameValuePair("senderEmail",senderEmail));
nameValuePairs.add(new BasicNameValuePair("senderName",senderName));
nameValuePairs.add(new BasicNameValuePair("senderPhone",senderPhone));
nameValuePairs.add(new BasicNameValuePair("comment",comment));
HttpPost request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(request);
return response.getEntity().getContent();
} this method called by as:-
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
mailHandler myhandler = new mailHandler();
xr.setContentHandler(myhandler);
String mailID = youremail.getText().toString();
if(mailID != null && !mailID.equalsIgnoreCase("") )
{
System.out.println("1");
ios = SendDetails(mailID,yourName.getText().toString(),yourPhoneNo.getText().toString(),yourMessage.getText().toString());
System.out.println("ios-----"+ios);
String strResponse = convertStreamToString(ios);
System.out.println("response"+strResponse);
xr.parse(new InputSource(ios));
resultmail = myhandler.emailresultdata();
customizeDialog = new CustomizeDialog(PropertyDetail.this);
customizeDialog.setTitle("Success");
customizeDialog.setMessage("Email send successfully");
customizeDialog.show();
Excepion occure above code due to which data not successfully send
follwing is stacktrace:-
07-03 09:02:15.264: WARN/System.err(491): java.io.IOException: Attempted read on closed stream.
07-03 09:02:15.275: WARN/System.err(491): at org.apache.http.conn.EofSensorInputStream.isReadAllowed(EofSensorInputStream.java:127)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:176)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:516)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318)
07-03 09:02:15.275: WARN/System.err(491): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275)
07-03 09:02:15.275: WARN/System.err(491): at com.rentfaster.home.PropertyDetail.onClick(PropertyDetail.java:1623)
07-03 09:02:15.275: WARN/System.err(491): at java.lang.reflect.Method.invokeNative(Native Method)
07-03 09:02:15.275: WARN/System.err(491): at java.lang.reflect.Method.invoke(Method.java:507)
07-03 09:02:15.275: WARN/System.err(491): at android.view.View$1.onClick(View.java:2139)
07-03 09:02:15.284: WARN/System.err(491): at android.view.View.performClick(View.java:2485)
07-03 09:02:15.284: WARN/System.err(491): at android.view.View$PerformClick.run(View.java:9080)
07-03 09:02:15.284: WARN/System.err(491): at android.os.Handler.handleCallback(Handler.java:587)
07-03 09:02:15.284: WARN/System.err(491): at android.os.Handler.dispatchMessage(Handler.java:92)
07-03 09:02:15.284: WARN/System.err(491): at android.os.Looper.loop(Looper.java:130)
07-03 09:02:15.284: WARN/System.err(491): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-03 09:02:15.284: WARN/System.err(491): at java.lang.reflect.Method.invokeNative(Native Method)
07-03 09:02:15.284: WARN/System.err(491): at java.lang.reflect.Method.invoke(Method.java:507)
07-03 09:02:15.284: WARN/System.err(491): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-03 09:02:15.294: WARN/System.err(491): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-03 09:02:15.294: WARN/System.err(491): at dalvik.system.NativeStart.main(Native Method)
and my convertStreamToString methos is as:-
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
Any one suggest me where am I wrong and what's right way to do this.
Upvotes: 0
Views: 1011
Reputation: 91
Ok , change your code from
xr.parse(new InputSource(ios));
to
InputStream input = new ByteArrayInputStream(strResponse.getBytes());
xr.parse(new InputSource(input));
Upvotes: 1
Reputation: 83313
Read my blog post about performing network connections on a separate thread. Wrapping the request in an AsyncTask
or a Thread
usually fixes the issue. It also makes your app much more responsive and less prone to ANR force close dialogs.
Upvotes: 0
Reputation: 1691
You are passing your input stream to convertStreamToString method and you are closing the same instance of input stream in that method. After that method still you are using same instance of stream. That's why you are getting this exception.
create one local variable of input stream in your convertStreamToString method like below.
private static String convertStreamToString(InputStream is) {
InputStream inputStream = is;
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
Try this.
Upvotes: 0