Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Base64 decoding for Android 2.1

I'm building an application with API Level 7 (Android 2.1) and I need to decode a string received by server,which is encoded with Base64. I know that Base64 library is included in Android 2.2, that's why I include the source code of it directly in my project. You can find the source code here: Base64.

So my problem is that when I try to decode a string the base64 returns this: BASE 64 : [B@46392d10.

If I run the code that server send me on online base64 decoder I get this: le":"en_US","id":2,"error_code":6003,"error_string":"Unsupported Client Version"}

Here is the code that I'm using :

HttpResponse response = httpclient.execute(httppost);
Log.v("Response ","Status line : "+ response.getStatusLine().toString());
String responseBody = EntityUtils.toString(response.getEntity()); //response
Log.v("Response ","Response : "+ responseBody);

String objectIdentificator = responseBody.substring(0,32);
Log.v("Response ","Object Identificator (LONGINT) : "+ objectIdentificator);

String type = responseBody.substring(33,36);
Log.v("Response ","TYPE (UNSIGNED BYTE) : "+ type);

String operation = responseBody.substring(37,40);
Log.v("Response ","OPERATION (UNSIGNED BYTE) : "+ operation);

String objectId = responseBody.substring(41, 73);
Log.v("Response ","UID (CHAR, length 32) : "+ objectId);

String id = responseBody.substring(74, 106);
Log.v("Response ","ID (LONGINT) : "+ id);

String size = responseBody.substring(107,139);
Log.v("Response ","Data Size (LONGINT) : "+ size);

String hash = responseBody.substring(140,172);
Log.v("Response ","Data Hash (CHAR, length 32 : "+ hash);

String dType = responseBody.substring(173,176);
Log.v("Response ","Data Type (UNSIGNED BYTE) : "+ dType);

String data = responseBody.substring(177, responseBody.length());
Log.v("Response ","Data (CHAR, any length, in BASE64) : "+ data);
String first = Base64.decode(data, Base64.DEFAULT).toString();
Log.v("Response ","BASE 64 : "+ first);

Any suggestions how to fix that?

like image 896
Android-Droid Avatar asked Jun 04 '26 00:06

Android-Droid


1 Answers

Your problem has nothing to do with Base64.

The Base64 class correctly returns a byte[] that contains the data. You call toString() on that byte[] which does not use the content of the byte[] but only its identityHashCode().

What you want to do instead is convert your byte[] into a String by giving the correct encoding:

byte[] bytes = Base64.decode(data, Base64.DEFAULT);
String string = new String(bytes, "UTF-8");
like image 146
Joachim Sauer Avatar answered Jun 05 '26 14:06

Joachim Sauer



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!