2012-10-11 7 views
0

여기 내 AsyncTask입니다. AsyncTask에서 예외 가져 오기 ...AsyncTask에서 예외를 해결하는 방법

private class GetCategories extends AsyncTask<String, Void, String[]> { 
    String temp[] = new String[] {}; 
    protected String[] doInBackground(String... urls) { 
     JSONParser jParser = new JSONParser(); 
     JSONArray category_details; 
     try { 
      URL url = new URL(urls[0]); 
      JSONObject json = jParser.getJSONFromUrl(url.toString()); 
      category_details = json.getJSONArray("cat"); 
      for (int i = 0; i < category_details.length(); i++) { 
       JSONObject obj = category_details.getJSONObject(i); 
       temp[i] = obj.getString("catName"); 
      } 
      return temp; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 

    @Override 
    protected void onPostExecute(String[] temp) { 

    } 

} 

나는이 작업을 수행하고 이와 같은 값을 가져 오는 중입니다.

try { 
     String[] test = new GetCategories().execute(categories_url).get(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

하지만 이런 오류가 발생합니다. doInBackground 메서드 내에서 예외가 발생합니다.

10-11 15:26:47.207: W/System.err(5158): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
10-11 15:26:47.207: W/System.err(5158):  at com.example.fragments.CatFragment$GetCategories.doInBackground(CategoriesFragment.java:207) 
10-11 15:26:47.207: W/System.err(5158):  at com.example.fragments.CatFragment$GetCategories.doInBackground(CategoriesFragment.java:1) 
10-11 15:26:47.207: W/System.err(5158):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
10-11 15:26:47.207: W/System.err(5158):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
10-11 15:26:47.207: W/System.err(5158):  at java.lang.Thread.run(Thread.java:856) 

라인 207은 캐치 블록으로 간다. 아무도 내가 여기서 잘못하고있는 것을 지적 할 수 있습니까?

+0

예외 자체를 제시해주십시오뿐만 아니라 전화

나중에, 클래스의 Java 메소드에서,이 같은 문자열 배열의 요소를 채울 수 있습니다 스택. 감사. – MByD

답변

3

내가 생각, 잘못된 문자열 배열 선언에 의해 발생이 예외는 당신은 당신이 앞에 배열, 당신이 할 수있는 할 필요가 얼마나 큰지 알고있는 경우 초기 크기 와 자바 String 배열을 선언)이이 튜토리얼 1 사용할 수 있습니다 (a) 캐릭터 어레이를 선언하고 (b) 그것이이 추천하는 초기의 크기를 줄 :

public class JavaStringArrayTests 
{ 
    private String[] toppings = new String[20]; 
    // more to the class here ... 
} 

을이 예에서는 토핑라는 문자열 배열을 선언 한 다음 20 개 요소의 초기 크기를 준다.

void populateStringArray() 
{ 
    toppings[0] = "Cheese"; 
    toppings[1] = "Pepperoni"; 
    toppings[2] = "Black Olives"; 
    // ... 
} 

소스 : http://alvinalexander.com/java/java-string-array-reference-java-5-for-loop-syntax

+0

감사합니다. 그건 내 실수 야. – intrepidkarthi

관련 문제