package com.android;

import java.io.BufferedReader;
import java.io.InputStream;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.res.AssetManager;
import android.content.res.AssetManager.AssetInputStream;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;

public class JsonTest extends Activity {
 /** Called when the activity is first created. */
 @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        //asset 폴더의 내용을 가져오기 
        AssetManager assetManager = getResources().getAssets();
        
        try{
            //사용하고자 하는 json 파일 open
            AssetInputStream ais = (AssetInputStream)assetManager.open("Json/home.json");
 
            //stream을 리더로 읽기
            BufferedReader br = new BufferedReader(new InputStream(ais));

            //StringBuilder 사용
            StringBuilder sb = new StringBuilder();

            //json파일의 내용이 용량이 클경우 Stirng 의 허용점인 4096 byte 를 넘어가면 오류발생
            int bufferSize = 1024 * 1024;
        
            //char 로 버프 싸이즈 만큼 담기위해 선언
            char readBuf [] = new char[bufferSize];
            int resultSize = 0;
        
            //파일의 전체 내용 읽어오기
            while((resultSize = br.read(readBuf))  != -1){
                if(resultSize == bufferSize){
                       sb.append(readBuf);
                }else{
                       for(int i = 0; i < resultSize; i++){
                            //StringBuilder 에 append
                            sb.append(readBuf[i]);
                       }
                }
            }
            // 새로운 문자열을 만들어서 내부 버퍼의 내용을 복사하고 반환한다.
            String jString = sb.toString();

            //JSONObject 얻어 오기
            JSONObject  jsonObject =  new JSONObject(jString);

             //json value 값 얻기
            String title = jsonObject.getString("title").toString();   
            System.out.println("title : " + title);  //출력값 NUGI_TEST


            //JSONArray 사용법 -buttons
            JSONArray btnJArr = new JSONArray(jsonObject.getString("buttos"));

            //btnJArr 의 length
            int btnLen = btnJArr.length();        
            //StringArray에 buttons 의 title 키의 value값을 담겠습니다. 

            String btnTitle [] = new String[btnLen];

            //버튼이미지 IntegerArray에 담기-text_Img 도 같은방법이라 생략;
            int btnImg [] = new int[btnLen];

            for(int i = 0; i < btnLen; i++){

                //buttons 의 값들중에 key 값이 title 인 value 뽑아오기
                btnTitle [i] = btnJArr.getJSONObject(i).getString("title").toString();
               //btnImg 담기

               //package_name 은 자신의 프로젝트 패키지명을 다 넣어줘야합니다. java파일 맨위에 package 라고 되어있죠 그 뒷부분 전체

              // getIdentifier(이미지명, 그려주기, 패키지네임); 이미지명에 substring 한 이유는 .png 가 들어가면 안되기에 잘라준겁니다.

                btnImg [i] = getResources().getIdentifier(btnJArr.getJSONObject(i).getString("btn_img")
                                                                                            .substring(0,  btnJArr.getJSONObject(i).getString("btn_img").indexOf("."))                                                                                           ,"drawable", "package_name");            
            }

            // gridId 에맞게 넣어주기 위해 선언

            int gridId = 0;

            for(int i = 0; i < btnLen; i++){
                 //xml 에서 ID 얻어오기
                gridId = R.id.mainGrid01 + i;
                //image set 위의 소스를 바로 넣어줘도 되지만 너무 길어서 담아서 넣었음.....요렇게 해주면 이미지가 쏘옥~
               ((ImageView)findViewById(gridId)).setImageResource(btnImg[i]);
            }

       

            //위와 같은 방법으로 lists도 담아주면되겠지요? 리스트 타입이기에 ListAdapter 를 사용하시면 됩니다.(강좌많으니 참고를...)

            //lists 에 type 이 web 일경우 WebView 를 통해서 보여주면 되겠지요~

        }
        catch(JSONException je){
                        Log.e("jsonErr", "json에러입니당~", je);
        }
        catch(Exception e){
                        Log.e("execption", "파일이 없나봐용", e);
        }
    }
}

json 관련 오류 인데요

 BufferedReader br = new BufferedReader(new InputStream(ais)); 

이부분이 계속 애러가 납니다..

BufferedReader 이 부분 () 안에는... FileReader("file.java") 이런걸 쓰라고 되 있던데...

위에서 그 파일 불러 오는 부분은 처리 해 줬는데도

애러가 나네요

고수 분들의 큰 도움 부탁 드립니다.