in my code i am sending the json data like this
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imgbmp.compress(Bitmap.CompressFormat.PNG, 90, baos);
byte[] b = baos.toByteArray();
String encodedImage = Base64.encodeBytes(b);
jsonstr = new JSONStringer().object().key("Text")
.value(msg).key("Files").array().object().key(
"ContentType").value("image/png").key(
"Content").value(encodedImage)
.endObject().endArray().key("AuthToken").value(token)
.endObject();
StringEntity entity = new StringEntity(jsonstr.toString());
entity.setContentType("application/json;charset=UTF-8");
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
request.setEntity(entity);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse res = httpClient.execute(request);
and i am getting this error while executing the HttpClient
09-30 11:56:21.571: INFO/Request(22161): org.apache.http.clien开发者_开发技巧t.methods.HttpPost@468613b0
09-30 11:56:21.586: INFO/JSON ANS(22161): <Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none"><Code><Value>Receiver</Value><Subcode><Value xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</Value></Subcode></Code><Reason><Text xml:lang="en-US">The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. </Text></Reason><Detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. </Message><StackTrace> at System.Convert.FromBase64String(String s)
09-30 11:56:21.586: INFO/JSON ANS(22161): at Zoodig.Core.WebServices.DataContracts.FileContract.GetStream()
09-30 11:56:21.586: INFO/JSON ANS(22161): at Zoodig.WebServices.Services.AthletesService.PostUpdate(PostUpdateContract data)
09-30 11:56:21.586: INFO/JSON ANS(22161): at SyncInvokePostUpdate(Object , Object[] , Object[] )
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.FormatException</Type></ExceptionDetail></Detail></Fault>
Please if anyone can understand this and tell me whats happening here..where are the posibilities that i have made any mistakes..and why i am getting the error?
Thank You. MKJParekh
i got the answer... i was not making any kind of mistakes
that was problem with org.json
i switched to another..and all it works
nesting too deep in JSON... should I switch to XML?
Looking at your code, you are using enimg
to add the image data to your JSON and not encodedImage
. If this is a cut & paste error in your question, then I suspect that there may be a problem in your Base64 encoding. Have you tried using the encodeToString()
method of android.util.Base64
instead?
Even if you need to support API versions earlier than 8, this will prove whether it's a Base64 error, and once you've determined that you'll know what you have to fix.
Don't pass files/images with json. You will get "out of memory" errors if files/images are big.
精彩评论