2011-03-03 31 views
0

私はアンドロイドのアプリケーションに取り組んでいます。私はクライアントにHTTPのURLを送信しており、それらからjsonを取り戻しています。受信したjsonは非常に大きいので、jsonの値をStringに格納することはできません。私は拡大バッファエラーにjsonの解析エラーを解決するには?

を取得していますので、以下の私のコードを添付したString.IにJSON値を解析するために利用可能なあらゆる解決策は...

package ez.com; 

import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream.GetField; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 

import org.json.JSONArray; 
import org.json.JSONObject; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.text.Html; 
import android.widget.Toast; 

public class apiconnection { 
    /** Called when the activity is first created. */ 

    public static URL    url; 
    public static URLConnection  urlConn; 
    public static DataInputStream dis; 
    public String str; 
    public static int val; 

    public static void urlconn(String url_val,Context con) 
    { 
     String s; 
     //StringBuilder sb = new StringBuilder(); 
     StringBuffer sb=new StringBuffer(); 
     String jsonval=null; 

     try 
     { 

      String urlval="http://iphone.openmetrics.com/apps/mattson/api.html"+url_val; 

      System.out.println("url value for connection: " +urlval);   
      url = new URL(urlval);   
      urlConn = url.openConnection(); 
      urlConn.setDoInput(true); 
      urlConn.setUseCaches(false); 
      dis = new DataInputStream(urlConn.getInputStream()); 

      if(dis.available()==0) 
      { 
       Toast.makeText(con, "No Data found Please search another option", Toast.LENGTH_LONG).show(); 
       AlertDialog.Builder ab=new AlertDialog.Builder(con); 
       ab.setMessage(Html.fromHtml("<b><font color=#ff0000> Network Error Please try Again" +"</font></b>")); 
       ab.setPositiveButton("ok", null); 
       ab.show(); 

      } 

      while ((s = dis.readLine()) != null) 
      {    

       sb.append(s); 

      }   
      "**jsonval=sb.toString();**" -------------------->This line is error 
      System.out.println("Json Parsed " +jsonval); 
      jsonreader.json(sb.toString()); 


     } 
     catch (MalformedURLException e) 
     { 
       throw new IllegalStateException("Malformed URL for : "+ e); 
     } 
     catch (IOException e) 
     { 
       throw new IllegalStateException("IO Exception for : " + e); 
     } 

    } 

} 
+0

もっと情報が必要ですか?そこからjson文字列を取得しますか?あなたはどうやって渡しますか?どのようなエラーが出ますか?これらの詳細を追加する質問を更新しますか? – Prasham

+0

ブラウザで非常に同じURLを開きます。 **大きさはどれくらいですか?**私は、この問題を起こすことなく多くの長いファイルをダウンロードしました。大きなファイルをモバイルデバイスにダウンロードしてもよろしいですか?あなたは何か小さいものを手に入れることはできませんか –

答えて

0

それがにJSONデータを分割するために働くだろうがありますバッファに収まるほど小さいパーサー可能なパーツはありますか?

+0

私に例を挙げてください........... – user533787

+0

たとえば、読んでいる行に適切なJSON構造の終わりが含まれているかどうかを調べることができます。そうであれば、既にたくさんのJSONを読んでいるので、それを部分文字列にしてJSON部分を解析してください。その後、次のパートに進みます。この手法を使用すると、JSONパーサのバッファを作成して、同時に多くのデータを解析することを防ぎます。 – Simeon