Négatif De La Taille De La Matrice D'Exception
Je suis nouveau sur Blackberry et j'essaie de poster un terme de recherche à un serveur xml. Mais je reçois cette erreur Request Failed. Reason Java.lang.NegativeArraySizeException
.
Je voulais vérifier si la connexion fonctionne avant de m'analyser les données à partir de cette connexion, attends de recevoir le texte de la réponse en xml. Ci-dessous le code:
public void webPost(String word) {
word = encode (word);
String responseText;
try{
HttpConnection connection = (HttpConnection)Connector.open("http://some url.xml");
connection.setRequestMethod(HttpConnection.POST);
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
String postData = "username=loginapi&password=myapilogin&term="+ word;
connection.setRequestProperty("Content-Length",Integer.toString(postData.length()));
connection.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0");
OutputStream requestOut = connection.openOutputStream();
requestOut.write(postData.getBytes());
InputStream detailIn = connection.openInputStream();
byte info[]=new byte[(int)connection.getLength()];
detailIn.read(info);
detailIn.close();
requestOut.close();
connection.close();
responseText=new String(info);
requestSuceeded(requestOut.toString(), responseText);
}
catch(Exception ex){
requestFailed(ex.toString());
}
}
private void requestSuceeded(String result, String responseText) {
if(responseText.startsWith("text/xml")) {
String strResult = new String(result);
synchronized(UiApplication.getEventLock()) {
textOutputField.setText(strResult);
}
} else{
synchronized(UiApplication.getEventLock()) {
Dialog.alert("Unknown content type: " + responseText);
}
}
}
public void requestFailed(final String message) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert("Request failed. Reason: " + message);
}
});
}
private String encode(String textIn) {
//encode text for http post
textIn = textIn.replace(' ','+');
String textout = "";
for(int i=0;i< textIn.length();i++){
char wcai = textIn.charAt(i);
if(!Character.isDigit(wcai) && !Character.isLowerCase(wcai) && !Character.isUpperCase(wcai) && wcai!='+'){
switch(wcai){
case '.':
case '-':
case '*':
case '_':
textout = textout+wcai;
break;
default:
textout = textout+"%"+Integer.toHexString(wcai).toUpperCase();//=textout.concat("%").concat(Integer.toHexString(wcai));
}
}else{
textout = textout+wcai;//=textout.concat(wcai+"");
}
}
return textout;
}
Double Possible de stackoverflow.com/questions/5089953/...
OriginalL'auteur michael92 | 2012-06-26
Vous devez vous connecter pour publier un commentaire.
connexion.getLength() est de retour -1.
Avant de créer info tableau, vérifiez la longueur de la connexion.
int length = (int) connection.getLength(); if(length > 0){ byte info[] = new byte[length]; detailIn.read(info); detailIn.close(); requestOut.close(); connection.close(); responseText=new String(info); requestSuceeded(requestOut.toString(),responseText);
parce que je l'ai fait mais maintenant je n'ai pas eu la moindre réponse maintenant. @kalaiOui. Sont u d'obtenir l'erreur? Vérifiez si "Négatif sur la taille du tableau" la ficelle est imprimé ou non.
De se! J'ai changé le OutputStream à ByteArrayOutputStream et mis en
String contentType = connection.getHeaderField("Content-type");
mais maintenant, il me donne les termes de la chaîne de données post, je veux dire les données que j'ai posté, mais pas les résultats de la recherche 🙁 toute aide @Kalai @Jite @Aurelienj'ai modifié maintenant et il semble faire un "get" au lieu de "post"
OriginalL'auteur Kalai Selvan Ravi
Je suis en supposant que
connection.getLength()
retourne -1 lorsque vous essayez d'initialiser votre tableau ici:Et c'est la raison pour la NegativeArraySizeException.
OriginalL'auteur Jite
Je suppose que quand vous ne
InputStream ne sais pas sa longueur, elle retourne -1.
voir http://www.velocityreviews.com/forums/t143704-inputstream-length.html
OriginalL'auteur Arcadien
Ref: http://supportforums.blackberry.com/t5/Java-Development/HttpConnection-set-to-POST-does-not-work/m-p/344946
Ref1: Blackberry envoyer une demande HTTPPost
Ref2: http://www.blackberryforums.com/developer-forum/181071-http-post-passing-parameters-urls.html
Quelque chose comme ceci:
OriginalL'auteur selladurai
Trouvé! J'ai oublié d'ouvrir le Flux de Sortie connexion
requestOut = connection.openOutputStream();
et j'ai introduit
ByteArrayOutpuStream
qui m'a permis enfin d'afficher le flux d'entrée. J'ai également changé la façon dont j'ai été l'envoi de paramètres, et utiliséURLEncodedPostData
type à la place. Depuis que le serveur a été l'interprétation de mon ancien demande, OBTENIR à la place d'un POSTE. Et tout ce que j'ai à faire maintenant est d'analyser l'info à venir dans.PS. J'ai posté le code ci-dessus pour aider quelqu'un avec le même problème.
PPS. J'ai aussi utilisé Kalai du format et il a aidé à merveille.
OriginalL'auteur michael92
java.lang.NegativeArraySizeException indique que vous essayez d'initialiser un tableau avec une longueur négative.
Le seul code qui est en cours d'initialisation est -
Vous voudrez peut-être ajouter une case pour la longueur avant d'initialiser le tableau
OriginalL'auteur user2019864