2012-04-26 3 views
0

제목에서 종종 내 응용 프로그램이 충돌하고 그것이 왜 그렇게하는지 확신 할 수없는 것처럼 보입니다.가끔 내 응용 프로그램이 중단되는 이유는 무엇입니까?

이 내가 입력을받을 곳은 다음과 같습니다 : 여기

코드입니다 공용 클래스 SearchActivity가 활동을 확장하는 결과를 검색하는 수행 {

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search); 

    final EditText edittext = (EditText) findViewById(R.id.edittext); 
    edittext.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // If the event is a key-down event on the "enter" button 
      if ((event.getAction() == KeyEvent.ACTION_DOWN) 
        && (keyCode == KeyEvent.KEYCODE_ENTER)) { 
       // Perform action on key press 
       String query = edittext.getText().toString(); 
       // gets the text and makes sure its a string 
       Intent intent = new Intent(SearchActivity.this, 
         DissertationActivity.class); 
       intent.putExtra("query1", query); 
       startActivity(intent); 

       return true; 
      } 
      return false; 
     } 
    }); 

    final Button button = (Button) findViewById(R.id.searchButton); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String query = edittext.getText().toString(); 
      // gets the text and makes sure its a string 

      Intent intent = new Intent(SearchActivity.this, 
        DissertationActivity.class); 
      intent.putExtra("query1", query); 
      startActivity(intent); 

     } 
    }); 

} 
} 

// 두 번째 활동이

  public class DissertationActivity extends ListActivity { 
/** Called when the activity is first created. */ 

public ArrayList<String> book_Array = new ArrayList<String>(); 
ArrayAdapter<String> adapter; 

String href = ""; 
String href1 = ""; 
String search_Word = ""; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle extras = getIntent().getExtras(); 
    search_Word = extras.getString("query1"); 

    adapter = new ArrayAdapter<String>(this, R.layout.list_item_1, 
      book_Array); 
    setListAdapter(adapter); 

    new LoadingProgressBar().execute(); 

} 

class LoadingProgressBar extends AsyncTask<String, Integer, String> { 

    ProgressDialog pDialog = new ProgressDialog(DissertationActivity.this); 

    protected void onPreExecute() { 
     this.pDialog.setMessage("Loading"); 
     this.pDialog.show(); 

    } 

    @Override 
    protected String doInBackground(String... params) { 

     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

     try { 
      Document doc = null; 
      Document guestLink = null; 

      guestLink = Jsoup.connect("https://aulib.abdn.ac.uk:443/F") 
        .get(); 
      Element link = guestLink.select("p > a").first(); 
      href1 = link.attr("href"); 
      href = href1.substring(0, href1.length() - 2); // removes -0 
                  // from 
                  // the 

      // href_Array.add(href); //adds href to the array because string 
      // wont add to the public var. 
      doc = Jsoup.connect(
        href + "&request=" + search_Word 
          + "&find_code=WRD&adjacent=N&x=0&y=0").get(); 
      // System.out.println(doc); 
      Elements headings = doc.select("td:eq(3)"); 
      // System.out.println(headings); 
      for (Element heading : headings) { 
       // System.out.println(heading.text()); 
       String j = heading.text(); 

       book_Array.add(j); 

      } 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } 

     book_Array.remove(0); 
     book_Array.remove(1); 
     book_Array.remove(2); 
     book_Array.remove("Search"); 
     book_Array.remove(" | "); 
     book_Array.remove(0); 

     pDialog.dismiss(); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, 
        long id) { 

       int query = position; 

       Intent intent = new Intent(DissertationActivity.this, 
         FullDetailsActivity.class); 
       intent.putExtra("href", href); 
       intent.putExtra("query1", (int) query); 
       intent.putExtra("search_Word", search_Word); 

       startActivity(intent); 

      } 

     }); 
     return null; 
    } 

} 

}

여기에 전자 스택 추적 (미안이 형식을 어떻게 해야할지 모르겠다) :

04-26 17:17:20.722: E/WindowManager(8576): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 
04-26 17:19:41.679: E/AndroidRuntime(8608): FATAL EXCEPTION: AsyncTask #5 
04-26 17:19:41.679: E/AndroidRuntime(8608): java.lang.RuntimeException: An error occured while executing doInBackground() 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.lang.Thread.run(Thread.java:1019) 
04-26 17:19:41.679: E/AndroidRuntime(8608): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.ArrayList.remove(ArrayList.java:406) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at com.library_app.DissertationActivity$LoadingProgressBar.doInBackground(DissertationActivity.java:102) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at com.library_app.DissertationActivity$LoadingProgressBar.doInBackground(DissertationActivity.java:1) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
04-26 17:19:41.679: E/AndroidRuntime(8608):  ... 4 more 
04-26 17:19:41.879: E/WindowManager(8608): Activity com.library_app.DissertationActivity has leaked window [email protected] that was originally added here 
04-26 17:19:41.879: E/WindowManager(8608): android.view.WindowLeaked: Activity com.library_app.DissertationActivity has leaked window [email protected] that was originally added here 
04-26 17:19:41.879: E/WindowManager(8608): at android.view.ViewRoot.<init>(ViewRoot.java:259) 
04-26 17:19:41.879: E/WindowManager(8608): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
04-26 17:19:41.879: E/WindowManager(8608): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-26 17:19:41.879: E/WindowManager(8608): at android.view.Window$LocalWindowManager.addView(Window.java:465) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.Dialog.show(Dialog.java:241) 
04-26 17:19:41.879: E/WindowManager(8608): at com.library_app.DissertationActivity$LoadingProgressBar.onPreExecute(DissertationActivity.java:59) 
04-26 17:19:41.879: E/WindowManager(8608): at android.os.AsyncTask.execute(AsyncTask.java:391) 
04-26 17:19:41.879: E/WindowManager(8608): at com.library_app.DissertationActivity.onCreate(DissertationActivity.java:49) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2953) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.ActivityThread.access$1600(ActivityThread.java:123) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 
04-26 17:19:41.879: E/WindowManager(8608): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-26 17:19:41.879: E/WindowManager(8608): at android.os.Looper.loop(Looper.java:130) 
04-26 17:19:41.879: E/WindowManager(8608): at android.app.ActivityThread.main(ActivityThread.java:3835) 
04-26 17:19:41.879: E/WindowManager(8608): at java.lang.reflect.Method.invokeNative(Native Method) 
04-26 17:19:41.879: E/WindowManager(8608): at java.lang.reflect.Method.invoke(Method.java:507) 
04-26 17:19:41.879: E/WindowManager(8608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
04-26 17:19:41.879: E/WindowManager(8608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
04-26 17:19:41.879: E/WindowManager(8608): at dalvik.system.NativeStart.main(Native Method) 

때로는 단지 충돌합니다. 내가 뭔가를 찾은 후에는 항상 그렇습니다. 나는 또한 휴대 전화의 버튼을 사용하여 다시 무언가를 검색하려고하면 모든 시간이 아니라 단지 몇 번이나 충돌한다는 것을 알아 냈습니다.

충돌의 원인은 무엇입니까? 내가 어떻게 고칠 수 있니?

감사합니다.

+0

당신을 좋아하지 않습니다. –

+0

@Kolink 아마 너를 좋아하지 않아 :) – dymmeh

답변

4
"Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0" 

는 0 (빈)의 크기가 배열

"at java.util.ArrayList.remove" 

는 당신이 당신의 배열에서 항목을 제거하려고에 의해 발생되고 있음을 알려줍니다에 액세스하려고 있음을 보여줍니다. 가능성이

,이 라인 중 하나 : 당신이 당신의 book_array 실제로이 값이 있는지 확인 아무 곳이나 확인되지 않기 때문에

book_Array.remove(0); 
book_Array.remove(1); 
book_Array.remove(2); 
book_Array.remove("Search"); 
book_Array.remove(" | "); 
book_Array.remove(0); 

는 원인이된다.

at com.library_app.DissertationActivity$LoadingProgressBar.doInBackground(DissertationActivity.java:102) 

당신이 그 라인을 확인하고 이전을 실행에 값을 확인해야합니다 수 있도록 예외를 일으키는 정확한 라인을 제공합니다. (logcat에서 해당 라인을 두 번 클릭하면 Eclipse를 사용하는 경우 해당 코드 행으로 이동합니다)

+0

고마워! 그것을 고쳐 줬던 것처럼 보였다! – Tbuermann

관련 문제