2013-07-03 2 views
0

조각에 gridview를 사용하고 있습니다. doInBackground.However에서 gridview로드 오전 AsyncTask # 1 치명적인 예외가 나타납니다. 다음은 내가 시도한 코드입니다.AsyncTask 예외를주는 doInBackground의 gridview

public class Home extends Fragment implements TabHost.OnTabChangeListener, 
     OnClickListener { 

    TabHost tabHost; 
    View vi; 
    StaggeredAdapter adapter; 
    TextView tv; 
    public String urls[] = { 

    "http://farm9.staticflickr.com/8462/8005636463_0cb4ea6be2.jpg", 
      "http://farm8.staticflickr.com/7232/6913504132_a0fce67a0e_c.jpg", 
      "http://farm5.staticflickr.com/4133/5096108108_df62764fcc_b.jpg", 
      "http://farm5.staticflickr.com/4074/4789681330_2e30dfcacb_b.jpg", 
      "http://farm9.staticflickr.com/8208/8219397252_a04e2184b2.jpg", 
      "http://farm9.staticflickr.com/8483/8218023445_02037c8fda.jpg", 
      "http://farm9.staticflickr.com/8335/8144074340_38a4c622ab.jpg", 
      "http://farm9.staticflickr.com/8060/8173387478_a117990661.jpg", 
      "http://farm9.staticflickr.com/8056/8144042175_28c3564cd3.jpg", 
      "http://farm9.staticflickr.com/8183/8088373701_c9281fc202.jpg", 
      "http://farm9.staticflickr.com/8185/8081514424_270630b7a5.jpg", 
      "http://farm9.staticflickr.com/8462/8005636463_0cb4ea6be2.jpg", 
      "http://farm9.staticflickr.com/8306/7987149886_6535bf7055.jpg", 
      "http://farm9.staticflickr.com/8444/7947923460_18ffdce3a5.jpg", 
      "http://farm9.staticflickr.com/8182/7941954368_3c88ba4a28.jpg", 
      "http://farm9.staticflickr.com/8304/7832284992_244762c43d.jpg", 
      "http://farm9.staticflickr.com/8163/7709112696_3c7149a90a.jpg", 
      "http://farm8.staticflickr.com/7127/7675112872_e92b1dbe35.jpg", 
      "http://farm8.staticflickr.com/7111/7429651528_a23ebb0b8c.jpg", 
      "http://farm9.staticflickr.com/8288/7525381378_aa2917fa0e.jpg", 
      "http://farm6.staticflickr.com/5336/7384863678_5ef87814fe.jpg", 
      "http://farm8.staticflickr.com/7102/7179457127_36e1cbaab7.jpg", 
      "http://farm8.staticflickr.com/7086/7238812536_1334d78c05.jpg", 
      "http://farm8.staticflickr.com/7243/7193236466_33a37765a4.jpg", 
      "http://farm8.staticflickr.com/7251/7059629417_e0e96a4c46.jpg", 
      "http://farm8.staticflickr.com/7084/6885444694_6272874cfc.jpg" }; 

    public static final String ARG_SECTION_NUMBER = "section_number"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     vi = inflater.inflate(R.layout.home, container, false); 
     Button iv = (Button) vi.findViewById(R.id.btnMoreDialog); 
     iv.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       PopupMenu homepopup = new PopupMenu(getActivity(), v); 

       MenuInflater inflater = homepopup.getMenuInflater(); 

       inflater.inflate(R.menu.moredialog, homepopup.getMenu()); 

       homepopup.show(); 

      } 
     }); 


     new Dialogs().execute(urls); 
     return vi; 
    } 

    private class Dialogs extends AsyncTask<String[] , Void, Void> 
    { 
     @Override 
     protected Void doInBackground(String[]... params) { 
      StaggeredGridView gridView = (StaggeredGridView) vi 
        .findViewById(R.id.staggeredGridView1); 

      int margin = getResources().getDimensionPixelSize(R.dimen.margin); 
      gridView.setItemMargin(margin); 
      gridView.setPadding(margin, 0, margin, 0); 

      // StaggeredAdapter adapter = new StaggeredAdapter(MainActivity.this, 
      // R.id.photoimageview, urls, R.layout.row_staggered_demo); 

      StaggeredAdapter adapter = new StaggeredAdapter(vi.getContext(), 
        R.id.photoimageview, params[0], R.layout.row_staggered_demo); 

      gridView.setAdapter(adapter); 

      return null; 
     } 


     @Override 
     protected void onPostExecute(Void result) { 


     } 
     @Override 
     protected void onPreExecute() { 


     } 

    } 

} 

아이디어가 있습니까? 감사합니다,

+1

onPostExecute에서

사용 runOnUiThread 또는 업데이트 UI는 스택 추적을 게시 할 수 있습니다. – Raghunandan

답변

1

doInbackground에서 ui를 업데이트하려고 시도하고 있습니다.

 gridView.setAdapter(adapter); 

ui 스레드에서 ui를 업데이트해야합니다.

 getActivity().runOnUiThread(new Runnable() //run on ui thread 
       { 
        public void run() 
        { 

       } 
       }); 
+0

귀하의 제안을 시도했지만 응용 프로그램이 주 스레드에서 너무 많은 작업을하고있을 수 있습니다. gridview가 표시되지 않고 해당 화면의 팝업 메뉴도 작동하지 않습니다. – asifa

+0

이것은 앱이 메인 ​​UI 스레드에서 너무 많은 작업을하고 있음을 의미합니다. 스레드 내에서 일부 작업을 이동해야합니다. 너는 그 일을 제대로하지 못하고있다. – Raghunandan

+0

위의 게시 된 코드는 내 스크린 코드입니다. 그 페이지에는 3 개의 버튼과 gridview가 있습니다. 단추 중 하나를 클릭하면 팝업 메뉴 및 gridview load.The 응용 프로그램을 표시하는 오전 모든 오류를주지 않습니다 – asifa

관련 문제