2013-03-15 29 views
0

我有我的應用程序的問題,我得到我的android手機的GPS位置然後有座標後,我想通過該數據到我的web服務,但我遇到這個錯誤,在本地主機中它運行完美無瑕。ecountering leaker窗口,雖然試圖通過GPS座標web服務

這是我得到的錯誤:

**

03-15 18:43:45.856: E/WindowManager(1906): Activity com.example.projectthesis.LocationPassing has leaked window [email protected] that was originally added here 
03-15 18:43:45.856: E/WindowManager(1906): android.view.WindowLeaked: Activity com.example.projectthesis.LocationPassing has leaked window [email protected] that was originally added here 
03-15 18:43:45.856: E/WindowManager(1906): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344) 
03-15 18:43:45.856: E/WindowManager(1906): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267) 
03-15 18:43:45.856: E/WindowManager(1906): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
03-15 18:43:45.856: E/WindowManager(1906): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
03-15 18:43:45.856: E/WindowManager(1906): at android.view.Window$LocalWindowManager.addView(Window.java:537) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.Dialog.show(Dialog.java:278) 
03-15 18:43:45.856: E/WindowManager(1906): at com.example.projectthesis.LocationPassing$phpconnect.onPreExecute(LocationPassing.java:74) 
03-15 18:43:45.856: E/WindowManager(1906): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561) 
03-15 18:43:45.856: E/WindowManager(1906): at android.os.AsyncTask.execute(AsyncTask.java:511) 
03-15 18:43:45.856: E/WindowManager(1906): at com.example.projectthesis.LocationPassing.onCreate(LocationPassing.java:58) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.Activity.performCreate(Activity.java:4465) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
03-15 18:43:45.856: E/WindowManager(1906): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-15 18:43:45.856: E/WindowManager(1906): at android.os.Looper.loop(Looper.java:137) 
03-15 18:43:45.856: E/WindowManager(1906): at android.app.ActivityThread.main(ActivityThread.java:4424) 
03-15 18:43:45.856: E/WindowManager(1906): at java.lang.reflect.Method.invokeNative(Native Method) 
03-15 18:43:45.856: E/WindowManager(1906): at java.lang.reflect.Method.invoke(Method.java:511) 
03-15 18:43:45.856: E/WindowManager(1906): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-15 18:43:45.856: E/WindowManager(1906): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-15 18:43:45.856: E/WindowManager(1906): at dalvik.system.NativeStart.main(Native Method) 

**

,這是我的課:

**

public class LocationPassing extends Activity{ 
    TextView txtLatitude; 
    TextView txtLongitude; 

    public static String strLat; 
    public static String strLong; 

    // ** This declarations was for passing of data to web service 
     // Progress Dialog 
     private ProgressDialog pDialog; 
     // JSONParser Object creation 
     JSONParser jsonParser = new JSONParser(); 
     // url to pass location to web 
      private static String url_create_product = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx/location_adding.php"; 
     //private static String url_create_product = "http://10.0.2.2/TheCalling/location_adding.php"; 

     // JSON Node names 
     private static final String TAG_SUCCESS = "success"; 
     private static final String TAG_PID = "pid"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.locationpassing); 

     txtLatitude = (TextView) findViewById(R.id.txtLatitude); 
     txtLongitude = (TextView) findViewById(R.id.txtLongitude); 

     strLat = Double.toString(Mapping2.ILatitude); 
     strLong = Double.toString(Mapping2.ILongitude); 

     this.txtLatitude.setText(strLat); 
     this.txtLongitude.setText(strLong); 

     new phpconnect().execute(); 

    } 

    class phpconnect extends AsyncTask<String, String, String> { 
     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(LocationPassing.this); 
      pDialog.setMessage("Logging in.."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 
     @Override 
     protected String doInBackground(String... args) { 
      String strLatitude = strLat; 
      String strLongitude = strLong; 

      String.valueOf(strLatitude); 
      String.valueOf(strLongitude); 

      // Building parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("latitude", strLatitude)); 
      params.add(new BasicNameValuePair("longitude", strLongitude)); 
      // getting JSON Object 
      // Note that create product url accepts POST method 
      JSONObject json = jsonParser.makeHttpRequest(url_create_product, 
        "POST", params); 
      // check log cat fro response 
      Log.d("Create Response", json.toString()); 
      try { 
       int success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 
        // successfully updated 
        Intent i = new Intent(getApplicationContext(), 
          Mapping2.class); 

        startActivity(i); 
        // closing this screen 
        finish(); 
       } else { 
        // failed to create product 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 
    } 
} 

**

謝謝你們提前。

回答

0

您在onPreExecute中創建了一個對話框,但不要在onPostExecute中關閉它。

你的AysncTask完成和pDialog超出範圍(它被銷燬),但窗口仍然在屏幕上,因此泄漏。

在開始另一項活動或致電finish()之前,您還需要將其解僱。

另外這款因此,如果您的活動被迫到後臺並重新它,如果你需要它的解僱,在onResume()

@Override 
public void onPause(){ 

    super.onPause(); 

    if(pDialog != null){ 
     pDialog.dismiss(); 
    }   

    ... 

} 

基本上添加到onPause(),不留在屏幕上,如果對話框您的任務完成或您離開活動。

+0

非常感謝你,現在沒有窗戶泄漏。 :)不幸的是,通過的部分只是不工作。無論如何,謝謝 – MakAdin 2013-03-15 19:10:33

+0

不客氣。除了問題之外,您可能還想單擊Tick以將其標記爲正確的答案,以便其他人可以在未來找到答案,並且我會得到一點時間幫助的獎勵;) – Simon 2013-03-15 19:14:15