Reputation: 3296
I have an ASP.NET website that uses C# to create JSON via a WebMethod, the webmethod is then called from a Java android application via an http post. I provide the webmethod with a page id and it returns the page contents, in this case it returns the content for an error page.
This is the JSON returned by the webmethod:
D/WebInterface( 2353): {"d":[{"intId":2418,"strName":"Error 404","strTitle":"Ooo
ps, I couldn\u0027t find that!","strSummary":"Error 404, I couldn\u0027t find th
e page you\u0027re looking for.","strBody":"\u003cp\u003eYou could try browsing
the website or checking that you typed the URL correctly, if you came to this pa
ge from another site, please let me know and thanks for visiting.\u003c/p\u003e"
,"strUpdateDate":null,"strCreateDate":null}]}
I use Google GSON in my Android app to create an object from the JSON but it returns null no matter what I do. Here is my Google GSON method:
public static Containerdata resultsFromJson(String json)
{
try
{
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
Containerdata results = gson.fromJson(json, Containerdata.class);
Log.d("WebInterface", "RETURNING OBJECT FROM JSON");
return results;
}
catch(Exception e)
{
Log.d("WebInterface", "Error: Malformed JSON.");
return null;
}
}
This method returns Containerdata which is below:
public class Containerdata {
public List<Containerdata.Node> d;
public class Node
{
int intId;
String strName;
String strTitle;
String strSummary;
String strBody;
String strUpdateDate;
String strCreatedate;
}
}
Containerdata returned by resultsFromJson is always null no matter what I do to the json returned by the webmethod and I have no idea why. This is the method that gets my JSON from my WebMethod:
// Gets json in the form of a string from a web service
public static String dataFromWeb(String url, String postData)
{
Log.d("WebInterface", "Loading from web");
try
{
HttpURLConnection httpcon = (HttpURLConnection) ((new URL(url).openConnection()));
httpcon.setDoOutput(true);
httpcon.setRequestProperty("Content-Type", "application/json");
httpcon.setRequestProperty("Accept", "application/json");
httpcon.setRequestMethod("POST");
httpcon.connect();
byte[] outputBytes = postData.getBytes("UTF-8");
OutputStream os = httpcon.getOutputStream();
os.write(outputBytes);
os.close();
InputStream response = httpcon.getInputStream();
Log.d("WebInterface", Helpers.convertStreamToString(response));
return Helpers.convertStreamToString(response);
}
catch(Exception e)
{
Log.d("WebInterface", "failed from web... " + e.toString());
return "";
}
}
Could anyone please help and point me in the right direction, I'd be very greatful.
Thanks a lot in advance!
Upvotes: 1
Views: 388
Reputation: 48871
The problem is in the following code...
InputStream response = httpcon.getInputStream();
Log.d("WebInterface", Helpers.convertStreamToString(response));
return Helpers.convertStreamToString(response);
You're basically trying to read the InputStream
twice. The first time is when you log the response and the second time is when you try to return
the response. The problem is you can't read a stream when it has already been read (OK, you can but that requires different code).
If you want to log the response then read the string locally and then log it and return it...
InputStream response = httpcon.getInputStream();
String responseString = Helpers.convertStreamToString(response);
Log.d("WebInterface", responseString);
return responseString;
Upvotes: 1