2012-12-10 58 views
0

當按鈕被按下不止一次時,我正在關閉力量。我有一個條件,如果互聯網連接,然後谷歌地圖將顯示。如果互聯網沒有連接,那麼我已經保持一個警告框顯示檢查我們的互聯網連接。所以問題在這裏。如果按下按鈕時互聯網未連接,則顯示警報框。但如果多次點擊,它會顯示FORCE CLOSE。我已經把在catch塊alertbox顯示..不止一次按下按鈕

case R.id.geocode_button: // Place name as selected by the user. 

      placeName = placeText.getText().toString(); 
      clik=1;   
      placenametemp = placeName; 
      System.out.println(""+placenametemp); 

      String [] optionArray = new String[numberOptions]; 
      Geocoder gcoder = new Geocoder(this); 

      try 
      { 
           ///// code to display google map 


      } 
      catch (IOException e) 
      { 
      if(!dialogShown) 
       { 
        dialogShown = true; 
        //Show your dialog 

       new 
     AlertDialog.Builder(this).setIcon(R.drawable.icon).setTitle(
       " Check your Internet 
     Connection!").setPositiveButton("OK", 
       new DialogInterface.OnClickListener() 
       { 

        @Override 
        public void onClick(DialogInterface dialog, 
        int which) 
        { 
         dialogShown = false;  
         // TODO Auto-generated method stub 
         dialog.cancel(); 
        } 
       }).show(); 

       Log.e("Geocoder", "I/O Failure; is network  
                   available?",e); 
      } 
          } 


//The LOG cat details : 


12-10 18:31:09.506: E/Geocoder(238): I/O Failure; is network available? 
    12-10 18:31:09.506: E/Geocoder(238): java.io.IOException: Unable to parse response from server 
    12-10 18:31:09.506: E/Geocoder(238): at android.location.Geocoder.getFromLocationName(Geocoder.java:166) 
    12-10 18:31:09.506: E/Geocoder(238): at com.journey.snoozer.Mapper.onClick(Mapper.java:93) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.View.performClick(View.java:2364) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.View.onTouchEvent(View.java:4179) 
    12-10 18:31:09.506: E/Geocoder(238): at android.widget.TextView.onTouchEvent(TextView.java:6540) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.View.dispatchTouchEvent(View.java:3709) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:09.506: E/Geocoder(238): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
    12-10 18:31:09.506: E/Geocoder(238): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
    12-10 18:31:09.506: E/Geocoder(238): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
    12-10 18:31:09.506: E/Geocoder(238): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
    12-10 18:31:09.506: E/Geocoder(238): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
    12-10 18:31:09.506: E/Geocoder(238): at android.os.Handler.dispatchMessage(Handler.java:99) 
    12-10 18:31:09.506: E/Geocoder(238): at android.os.Looper.loop(Looper.java:123) 
    12-10 18:31:09.506: E/Geocoder(238): at android.app.ActivityThread.main(ActivityThread.java:4363) 
    12-10 18:31:09.506: E/Geocoder(238): at java.lang.reflect.Method.invokeNative(Native Method) 
    12-10 18:31:09.506: E/Geocoder(238): at java.lang.reflect.Method.invoke(Method.java:521) 
    12-10 18:31:09.506: E/Geocoder(238): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
    12-10 18:31:09.506: E/Geocoder(238): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    12-10 18:31:09.506: E/Geocoder(238): at dalvik.system.NativeStart.main(Native Method) 
    12-10 18:31:10.277: E/ActivityThread(238): Failed to find provider info for com.google.settings 
    12-10 18:31:10.296: E/ActivityThread(238): Failed to find provider info for com.google.settings 
    12-10 18:31:10.426: E/ActivityThread(238): Failed to find provider info for com.google.settings 
    12-10 18:31:11.626: I/MapActivity(238): Handling network change notification:CONNECTED 
    12-10 18:31:11.626: E/MapActivity(238): Couldn't get connection factory client 
    12-10 18:31:11.926: D/dalvikvm(238): GC freed 3247 objects/233880 bytes in 241ms 
    12-10 18:31:11.936: E/DEBUGTAG(238): Remote Image Exception 
    12-10 18:31:11.936: E/DEBUGTAG(238): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.view.ViewRoot.checkThread(ViewRoot.java:2683) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.view.ViewRoot.requestLayout(ViewRoot.java:557) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.view.View.requestLayout(View.java:7918) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.view.View.requestLayout(View.java:7918) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.view.View.requestLayout(View.java:7918) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.view.ViewGroup.removeAllViews(ViewGroup.java:2146) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:196) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.app.Activity.setContentView(Activity.java:1622) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at com.journey.snoozer.ShowTheMap.mapProgress(ShowTheMap.java:143) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at com.journey.snoozer.ShowTheMap$loadImageTask.doInBackground(ShowTheMap.java:197) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at com.journey.snoozer.ShowTheMap$loadImageTask.doInBackground(ShowTheMap.java:1) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
    12-10 18:31:11.936: E/DEBUGTAG(238): at java.lang.Thread.run(Thread.java:1096) 
    12-10 18:31:12.756: D/dalvikvm(238): GC freed 7692 objects/597720 bytes in 68ms 
    12-10 18:31:12.886: D/dalvikvm(238): GC freed 5342 objects/404384 bytes in 62ms 
    12-10 18:31:13.296: E/WindowManager(238): Activity com.journey.snoozer.Mapper has leaked window [email protected] that was originally added here 
    12-10 18:31:13.296: E/WindowManager(238): android.view.WindowLeaked: Activity com.journey.snoozer.Mapper has leaked window [email protected] that was originally added here 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.ViewRoot.<init>(ViewRoot.java:227) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.Window$LocalWindowManager.addView(Window.java:424) 
    12-10 18:31:13.296: E/WindowManager(238): at android.app.Dialog.show(Dialog.java:239) 
    12-10 18:31:13.296: E/WindowManager(238): at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 
    12-10 18:31:13.296: E/WindowManager(238): at com.journey.snoozer.Mapper.onClick(Mapper.java:141) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.View.performClick(View.java:2364) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.View.onTouchEvent(View.java:4179) 
    12-10 18:31:13.296: E/WindowManager(238): at android.widget.TextView.onTouchEvent(TextView.java:6540) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.View.dispatchTouchEvent(View.java:3709) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
    12-10 18:31:13.296: E/WindowManager(238): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
    12-10 18:31:13.296: E/WindowManager(238): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
    12-10 18:31:13.296: E/WindowManager(238): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
    12-10 18:31:13.296: E/WindowManager(238): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
    12-10 18:31:13.296: E/WindowManager(238): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
    12-10 18:31:13.296: E/WindowManager(238): at android.os.Handler.dispatchMessage(Handler.java:99) 
    12-10 18:31:13.296: E/WindowManager(238): at android.os.Looper.loop(Looper.java:123) 
    12-10 18:31:13.296: E/WindowManager(238): at android.app.ActivityThread.main(ActivityThread.java:4363) 
    12-10 18:31:13.296: E/WindowManager(238): at java.lang.reflect.Method.invokeNative(Native Method) 
    12-10 18:31:13.296: E/WindowManager(238): at java.lang.reflect.Method.invoke(Method.java:521) 
    12-10 18:31:13.296: E/WindowManager(238): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
    12-10 18:31:13.296: E/WindowManager(238): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    12-10 18:31:13.296: E/WindowManager(238): at dalvik.system.NativeStart.main(Native Method) 
+3

請張貼您的logcat錯誤報告 –

+1

這是不正確的方式來檢查互聯網狀態。 –

+0

使用此鏈接檢查互聯網連接> http://stackoverflow.com/questions/4238921/android-detect-whether-there-is-an-internet-connection-available –

回答

0

您不能顯示的警告對話框中一個以上的時間,所以把像檢查這

首先創建一個類級別變量

public boolean dialogShown = false; 

然後在這裏case R.id.geocode_button

if(!dialogShown){ 
dialogShown = true; 
//Show your dialog 
} 

然後在對話框ok按鈕單擊listener

dialogShown = false; 

更新

檢查您的網絡連接像這樣的離子

void boolean checkInternet(){ 
    NetworkInfo i = conMgr.getActiveNetworkInfo(); 
    if (i == null) 
    return false; 
    if (!i.isConnected()) 
    return false; 
    if (!i.isAvailable()) 
    return false; 
    return true; 
} 
+0

我試過sir ..它不工作 – Sindu

+0

發佈您的更新代碼,然後我會看到發生了什麼 –

+0

我已更新我的catch塊..Sir我猜問題不是因爲警報框因爲剛剛嘗試過與Toast味精同樣的情況,並且當按鈕被按下很多次時,我仍然收到了強制關閉 – Sindu

0

對。首先,這不是檢查互聯網連接是否可用的方法。但這不是問題。 第一個問題是CalledFromTheWrongThread異常,這意味着某個地方你試圖從另一個線程訪問UI元素。永遠不要這樣做。我猜你有一個AsyncTask嘗試以不允許的方式發佈一些更新。 (在com.journey.snoozer.ShowTheMap.mapProgress(ShowTheMap.java:143))

這裏的主要問題是WindowLeaked異常向下幾行。例如,當你退出一個活動並嘗試訪問一個對話框時,會發生這種情況。 (方向更改等)由於您有涉及AsyncTask的其他異常,我想知道是否在發生IO異常時取消第一個AsycTask。

因此,請確保在onPause()中的AsyncTask上使用.cancel(),並在任務創建的對話框上使用dissmiss()。