2012-11-02 4 views
0

연결 관리자를 사용하여 인터넷에 연결되어 있지 않은 경우 앱을 닫으려고합니다. 그러나 그 코드를 구현 한 후에. 나는 그것을 달릴 것 같지 않다, 그것은 단지 예외와 충돌한다. 아래는 내 코드와 내 logcat입니다.Android 마침() Asynctask의 활동

public class BuyFragment extends SherlockListFragment implements 
     ActionBar.TabListener { 

    static final String URL = "https://myxml.xml"; 
    static final String KEY_SONG = "song"; 
    static final String KEY_ID = "id"; 
    static final String KEY_TITLE = "title"; 
    static final String KEY_CAT_ARTIST = "artistcat"; 
    static final String KEY_DURATION = "duration"; 
    static final String KEY_THUMB_URL = "thumb_url"; 
    static final String KEY_BIG_URL = "big_url"; 
    static final String KEY_CAT_URL = "cat_url"; 
    static final String KEY_DESC = "cat_desc"; 
    ArrayList<HashMap<String, String>> menuItems; 
    ListAdapter adapter; 
    Context appContext; 
    Activity mAct; 
    private Fragment mFragment; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 

     if (!isNetworkAvailable()) { 
      Toast.makeText(getActivity(), 
        "Internet Connection Required", Toast.LENGTH_SHORT).show(); 
      //this.finish(); 
      mAct.finish(); 
     } else { 
     new loadListView().execute(); 

     } 
     super.onActivityCreated(savedInstanceState); 
    } 


    private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 
    } 

    public class loadListView extends AsyncTask<Integer, String, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(Integer... args) { 
      // updating UI from Background Thread 
      menuItems = new ArrayList<HashMap<String, String>>(); 

      XMLParser parser = new XMLParser(); 
      String xml = parser.getXmlFromUrl(URL); // getting XML 
      Document doc = parser.getDomElement(xml); // getting DOM element 

      NodeList nl = doc.getElementsByTagName(KEY_SONG); 
      // looping through all item nodes <item> 
      for (int i = 0; i < nl.getLength(); i++) { 
       // creating new HashMap 
       HashMap<String, String> map = new HashMap<String, String>(); 
       Element e = (Element) nl.item(i); 
       // adding each child node to HashMap key => value 
       map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
       map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 
       map.put(KEY_CAT_ARTIST, parser.getValue(e, KEY_CAT_ARTIST)); 
       map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION)); 
       map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL)); 
       map.put(KEY_BIG_URL, parser.getValue(e, KEY_BIG_URL)); 
       map.put(KEY_CAT_URL, parser.getValue(e, KEY_CAT_URL)); 
       map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); 
       // adding HashList to ArrayList 
       menuItems.add(map); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String args) { 

      if (getActivity() != null) { 
       adapter = new MainPageLazyAdapter(getActivity(), menuItems); 
       setListAdapter(adapter); 

       ListView lv = getListView(); 

       lv.setOnItemClickListener(new OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
         String thumburl; 
         String bigurl; 
         String caturl; 
         String title; 
         String desc; 
         String artist; 
         Intent in; 

         title = ((TextView) view.findViewById(R.id.title)) 
           .getText().toString(); 
         artist = ((TextView) view.findViewById(R.id.artist)) 
           .getText().toString(); 
         desc = ((TextView) view.findViewById(R.id.desc)) 
           .getText().toString(); 
         thumburl = ((TextView) view 
           .findViewById(R.id.thumb_image)).getText() 
           .toString(); 
         caturl = ((TextView) view.findViewById(R.id.cat)) 
           .getText().toString(); 
         bigurl = ((TextView) view.findViewById(R.id.big_image)) 
           .getText().toString(); 

         in = new Intent(getActivity(), 
           SingleImageViewActivity.class); 

         in.putExtra(KEY_TITLE, title); 
         in.putExtra(KEY_DESC, desc); 
         in.putExtra(KEY_CAT_URL, caturl); 
         in.putExtra(KEY_THUMB_URL, thumburl); 
         in.putExtra(KEY_BIG_URL, bigurl); 
         in.putExtra(KEY_CAT_ARTIST, artist); 
         startActivity(in); 

        } 
       }); 
      } 

     } 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     mFragment = new BuyFragment(); 
     ft.add(android.R.id.content, mFragment); 
     ft.attach(mFragment); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     ft.remove(mFragment); 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 

    } 
} 

로그 캣 :

11-02 14:56:48.390: E/AndroidRuntime(13446): FATAL EXCEPTION: main 
11-02 14:56:48.390: E/AndroidRuntime(13446): java.lang.NullPointerException 
11-02 14:56:48.390: E/AndroidRuntime(13446): at in.wptrafficanalyzer.actionbarsherlocknavtab.BuyFragment.onActivityCreated(BuyFragment.java:57) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:891) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.os.Handler.handleCallback(Handler.java:587) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.os.Looper.loop(Looper.java:130) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at android.app.ActivityThread.main(ActivityThread.java:3691) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at java.lang.reflect.Method.invokeNative(Native Method) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at java.lang.reflect.Method.invoke(Method.java:507) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
11-02 14:56:48.390: E/AndroidRuntime(13446): at dalvik.system.NativeStart.main(Native Method) 
+0

'finish()'가 호출 될 때'mAct'가 초기화되지 않은 것처럼 보입니다. –

+1

네트워크 프로세스를 검사하여 새 분할 스레드에 넣습니다. – ckpatel

+0

Chirag에게 감사드립니다. 그러나 나는 그것을 이렇게 원한다. 내 코드를 정정 해 주실 수 있겠습니까? 나는 끝내는 것을 couldnt한다. –

답변

0

그냥 (마감 쓰기) 또는 ActivityName.finish(); 코드 문제는 그 다음 나에게 돌아 가야 발생하면 내가 몇 가지 코드

1
mAct.finish() 

위의 라인이 문제의 원인을 쓸 것입니다 .. 당신은 거의 다했다 .... 내가 본 OK입니다. 여기 mActnull입니다. mAct은 초기화되었으므로 mAct.finish()이 호출 될 때까지 계속 활성화되어 있습니까?

0

mAct.finish() 대신 getActivity().finish()을 사용하십시오. 귀하의 코드에서 mAct은 초기화되지 않았습니다.