[解決済み] 負の配列サイズ例外
2022-02-11 12:54:13
質問事項
私はBlackberryの初心者ですが、xmlで検索語をサーバーに投稿しようとしています。しかし、次のようなエラーが発生します。
Request Failed. Reason Java.lang.NegativeArraySizeException
.
私はデータを解析する前に、接続が機能しているかどうかをチェックしたかったので、この接続から、xmlで応答テキストを受け取ることを期待しています。以下はそのコードです。
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;
}
解決方法は?
見つけた!出力ストリームの接続を開くのを忘れていました
requestOut = connection.openOutputStream();
を紹介し
ByteArrayOutpuStream
で、ようやく入力ストリームを表示できるようになりました。また、パラメータの送り方を変えて
URLEncodedPostData
タイプに変更しました。サーバーは以前の私のリクエストをPOSTではなくGETと解釈していたからです。そして、私が今しなければならないのは、送られてきた情報を解析することだけです。
try{
connection = (HttpConnection)Connector.open("http://someurl.xml",Connector.READ_WRITE);
URLEncodedPostData postData = new URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET, false);
postData.append("username", "loginapi");
postData.append("password", "myapilogin");
postData.append("term", word);
connection.setRequestMethod(HttpConnection.POST);
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
connection.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0");
requestOut = connection.openOutputStream();
requestOut.write(postData.getBytes());
String contentType = connection.getHeaderField("Content-type");
detailIn = connection.openInputStream();
int length = (int) connection.getLength();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if(length > 0){
byte info[] = new byte[length];
int bytesRead = detailIn.read(info);
while(bytesRead > 0) {
baos.write(info, 0, bytesRead);
bytesRead = detailIn.read(info);
}
baos.close();
connection.close();
requestSuceeded(baos.toByteArray(), contentType);
detailIn.read(info);
}
else
{
System.out.println("Negative array size");
}
requestOut.close();
detailIn.close();
connection.close();
}
PS. 同じ悩みを持つ人の参考になればと思い、上記のコードを掲載しました。
PPS. また、私は カライのフォーマット で、見事に助けられました。
関連
-
[解決済み] リバースルーティングとは何ですか?
-
youtubeマッチチャンネル(チャンネル)
-
[解決済み] HTTPポストで文字+が%2Bに変換される
-
[解決済み】Postman Chrome拡張機能で配列を送信することは可能ですか?
-
[解決済み】cURLを使用してBasic HTTP認証を正しく定義する方法は?
-
[解決済み】HTTPプロトコルでクッキーはどのように渡されるのですか?
-
[解決済み] bash/shellスクリプトからhttp応答コードを評価する方法は?
-
[解決済み】http:// のリンクを全て // に変更することは可能ですか?
-
[解決済み】投稿リクエストのサイズ制限は?
-
[解決済み] Cache-Control: privateとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リバースルーティングとは何ですか?
-
[解決済み] X-Forwarded-Forヘッダーが表示されないブラウザの理由
-
[解決済み] ファイルのダウンロードにContent-Type: application/octet-streamは必要ですか?
-
[解決済み] Chromeのネットワークデバッガをリダイレクトで使用する方法
-
[解決済み】HTTP 1.0 vs 1.1
-
[解決済み】マイクロサービスのオーケストレーション
-
[解決済み】ユーザーエージェント文字列の大きさはどれくらいになりますか?
-
[解決済み】「HTTPはステートレスプロトコルである」と言われているのはなぜですか?
-
[解決済み】HTTP 301と308のステータスコードの違いは何ですか?
-
[解決済み] HTTPのPOSTメソッドをキャッシュすることは可能ですか?