J'utilise une requête http lib pour récupérer du contenu xml. L'auditeur du lib a les fonctions suivantes:android chaîne concat OutOfMemoryError
void onDataReceived(char[] data)
{
}
void onRequestSucceeded()
{
}
Après avoir demandé une URL, la lib recevra les données dans de nombreuses pièces, quand chaque donnée est reçue, la fonction onDataReceived
sera appelée, et cette pièce des données seront passées en paramètre, et je dois concaténer toutes les pièces en une seule chaîne. Et après que la demande est terminée, la fonction onRequestSucceeded
sera appelée et la chaîne est maintenant le contenu complet du fichier XML.
Je fais comme ceci:
//init the result string
String resStr = new String("");
void onDataReceived(char[] data)
{
resStr += new String(data);
}
void onRequestSucceeded()
{
//now the resStr is ready for parse.
}
Le problème est, parfois mon appareil Android rapport OutOfMemoryError lorsque concating la chaîne. Alors j'ai changé pour StringBuffer comme ceci:
//init the result string
StringBuffer resStr = new StringBuffer("");
void onDataReceived(char[] data)
{
resStr.append(data);
}
void onRequestSucceeded()
{
//now the resStr is ready for parse.
}
Mais resStr.toString() me donne le contenu bizarre comme "@bsdawevas". Je pense qu'il y a quelque chose qui ne va pas dans l'encodage, mais je ne sais pas comment le résoudre.
Des idées?
essayer d'écrire smth comme ceci: resStr.append (new String (données)) –