2013-11-03 31 views
0

我正在學習android,所以我開發了一個小應用程序,我試圖通過互聯網訪問數據庫,所以要做到這一點,我第一次嘗試使用本地主機使用WAMP服務器和PHP現在我只是修改必要的文件並上傳到網站,現在當我運行應用程序時,它會嘗試通過互聯網獲取數據,然後顯示以下LOGCAT。在從互聯網上的數據庫獲取數據的問題

我無法瞭解它說:

10-30 23:48:23.986: E/WindowManager(4484): Activity com.kamani.nirav.androidphpdemo.AllProductsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40cd4c88 V.E..... R.....ID 0,0-384,96} that was originally added here 
10-30 23:48:23.986: E/WindowManager(4484): android.view.WindowLeaked: Activity com.kamani.nirav.androidphpdemo.AllProductsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40cd4c88 V.E..... R.....ID 0,0-384,96} that was originally added here 
10-30 23:48:23.986: E/WindowManager(4484): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354) 
10-30 23:48:23.986: E/WindowManager(4484): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216) 
10-30 23:48:23.986: E/WindowManager(4484): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.Dialog.show(Dialog.java:281) 
10-30 23:48:23.986: E/WindowManager(4484): at com.kamani.nirav.androidphpdemo.AllProductsActivity$LoadAllProducts.onPreExecute(AllProductsActivity.java:54) 
10-30 23:48:23.986: E/WindowManager(4484): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
10-30 23:48:23.986: E/WindowManager(4484): at android.os.AsyncTask.execute(AsyncTask.java:534) 
10-30 23:48:23.986: E/WindowManager(4484): at com.kamani.nirav.androidphpdemo.AllProductsActivity.onCreate(AllProductsActivity.java:41) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.Activity.performCreate(Activity.java:5104) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
10-30 23:48:23.986: E/WindowManager(4484): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-30 23:48:23.986: E/WindowManager(4484): at android.os.Looper.loop(Looper.java:137) 
10-30 23:48:23.986: E/WindowManager(4484): at android.app.ActivityThread.main(ActivityThread.java:5041) 
10-30 23:48:23.986: E/WindowManager(4484): at java.lang.reflect.Method.invokeNative(Native Method) 
10-30 23:48:23.986: E/WindowManager(4484): at java.lang.reflect.Method.invoke(Method.java:511) 
10-30 23:48:23.986: E/WindowManager(4484): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
10-30 23:48:23.986: E/WindowManager(4484): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
10-30 23:48:23.986: E/WindowManager(4484): at dalvik.system.NativeStart.main(Native Method) 

這裏是我的應用程序的代碼:

public class AllProductsActivity extends ListActivity { 

private ProgressDialog processDialog; 

JSONParser jsonParse = new JSONParser(); 

ArrayList<HashMap<String, String>> productsList; 

private static String url_all_products = "http://www.niravkamani.com/get_all_products.php"; 

private static final String TAG_SUCCESS = "success"; 
private static final String TAG_PRODUCTS = "products"; 
private static final String TAG_PID = "pid"; 
private static final String TAG_NAME = "name"; 

JSONArray products = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.all_products); 

    productsList = new ArrayList<HashMap<String, String>>(); 

    new LoadAllProducts().execute(); 

} 

class LoadAllProducts extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     processDialog = new ProgressDialog(AllProductsActivity.this); 
     processDialog.setMessage("Loading items...Please wait..."); 
     processDialog.setIndeterminate(false); 
     processDialog.setCancelable(false); 
     processDialog.show(); 
    } 

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

     JSONObject json = jsonParse.makeHttpRequest(url_all_products); 

     try { 
      int success = json.getInt(TAG_SUCCESS); 
      if (success == 1) { 

       products = json.getJSONArray(TAG_PRODUCTS); 

       for (int i = 0; i < products.length(); i++) { 
        JSONObject c = products.getJSONObject(i); 

        String id = c.getString(TAG_PID); 
        String name = c.getString(TAG_NAME); 

        HashMap<String, String> map = new HashMap<String, String>(); 

        map.put(TAG_PID, id); 
        map.put(TAG_NAME, name); 

        productsList.add(map); 

       } 

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

     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     processDialog.dismiss(); 

     ListAdapter listAdapter = new SimpleAdapter(
       AllProductsActivity.this, productsList, R.layout.list_item, 
       new String[] { TAG_PID, TAG_NAME }, new int[] { R.id.pid, 
         R.id.name }); 

     setListAdapter(listAdapter); 
    } 
} 

} 

回答

1

窗口泄漏發生時,你是指或持有某些情況下,即使其沒有要求更長。

嘗試檢查您的進度對話框是否仍然有效&如果它處於活動狀態,您需要關閉onDestroy()生命週期方法中的progressdialog。

例如:

@覆蓋 保護無效的onDestroy(){

super.onDestroy(); 
    if (pDialog != null && pDialog.isShowing()) { 

     pDialog.dismiss(); 
    } 
} 

pDialog是我progressdialog對象

+0

Maulik謝思遐你是對的,你能告訴我,爲什麼它發生? –

+0

我無法理解它是如何工作的,因爲onPostExecute我已經解僱了它。 –

相關問題