2

次の ReadBodyN() のようなコードを使用して取得した ByteBuffer オブジェクトに含まれる XML データを解析しようとしています。Httprequest が小さな XML ページに与えられた場合、ReadBodyN() と解析は正常に機能します。しかし、ReadBodyN() の実行後に 50,000 文字を超える大規模な XML ページの場合、ByteBuffer オブジェクトで使用できるのは 15559 文字のみです。XML 全体を bytebuffer に入れるにはどうすればよいですか?

 HttpResponse* pResponse = httpTransaction.GetResponse();
 if (pResponse->GetHttpStatusCode() == HTTP_STATUS_OK)
 {
     ByteBuffer* pBody = null;
     pBody = pResponse->ReadBodyN();
 }
4

1 に答える 1

2

参照用に次のコードを使用してください。tizen では、応答をデータのチャンクとして取得しています。あなたが言ったように、15559 バイトは参照データです。そのため、データ全体を取得するまで、bytebuffer データを収集する必要があります。

Code description:バイトバッファをクラス変数として保持 ( here _pBuff)

_hasDataバッファにデータがあると設定されるフラグです(その後、データを追加する必要があります)

データ全体をクリアしたら、_pbuff

void YourClass::OnTransactionReadyToRead(HttpSession& httpSession,
      HttpTransaction& httpTransaction, int availableBodyLen) {

 AppLog("Transaction Ready to Read : availableBodyLen %d", availableBodyLen);

 try {
      HttpResponse* pHttpResponse = null;
      HttpHeader* pHttpHeader = null;

      pHttpResponse = httpTransaction.GetResponse();

      if (pHttpResponse->GetHttpStatusCode() == HTTP_STATUS_OK) {

           bool _hasData = false;

           if (!_pBuff) {
                _pBuff = new ByteBuffer;
                _pBuff->Construct(availableBodyLen);
           }
           else
           {
                _pBuff->ExpandCapacity(_pBuff->GetCapacity() + availableBodyLen);
                _hasData = true;
           }

           pHttpHeader = pHttpResponse->GetHeader();

           if(_hasData)
           {
                ByteBuffer* pBody = pHttpResponse->ReadBodyN();

                // add to local store
                byte* pByte = new byte[availableBodyLen];
                pBody->GetArray(pByte,0,availableBodyLen);
                _pBuff->SetPosition(_pBuff->GetCapacity() - availableBodyLen);
                _pBuff->SetArray(pByte,0,availableBodyLen);
                delete []pByte;
                delete pBody;
           }
           else
                _pBuff = pHttpResponse->ReadBodyN();

    // Your Call || code
 }
 }
于 2013-11-14T18:52:44.843 に答える