2016-11-25 46 views
0

這是我的MainScreenActivity.java代碼:活動泄露:android.view.WindowLeakedActivity com.example.androidhive.AllProductsActivity滲漏窗口DecorView @ bf6bd49 []

public class MainScreenActivity extends Activity{ 

Button btnViewProducts; 
Button btnNewProduct; 

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

    // Buttons 
    btnViewProducts = (Button) findViewById(R.id.btnViewProducts); 
    btnNewProduct = (Button) findViewById(R.id.btnCreateProduct); 

    // view products click event 
    btnViewProducts.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      // Launching All products Activity 
      Intent i = new Intent(getApplicationContext(), AllProductsActivity.class); 
      startActivity(i); 

     } 
    }); 

    // view products click event 
    btnNewProduct.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      // Launching create new product activity 
      Intent i = new Intent(getApplicationContext(), NewProductActivity.class); 
      startActivity(i); 

     } 
    }); 
} 

我AllProductsActivity.java:

public class AllProductsActivity extends ListActivity { 

// Progress Dialog 
private ProgressDialog pDialog; 

// Creating JSON Parser object 
JSONParser jParser = new JSONParser(); 

ArrayList<HashMap<String, String>> productsList; 

// url to get all products list 
private static String url_all_products = "http://127.0.0.1/android_connect2/get_all_products.php"; 

// JSON Node names 
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"; 

// products JSONArray 
JSONArray products = null; 

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

    // Hashmap for ListView 
    productsList = new ArrayList<HashMap<String, String>>(); 

    // Loading products in Background Thread 
    new LoadAllProducts().execute(); 

    // Get listview 
    ListView lv = getListView(); 

    // on seleting single product 
    // launching Edit Product Screen 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // getting values from selected ListItem 
      String pid = ((TextView) view.findViewById(R.id.pid)).getText() 
        .toString(); 

      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), 
        EditProductActivity.class); 
      // sending pid to next activity 
      in.putExtra(TAG_PID, pid); 

      // starting new activity and expecting some response back 
      startActivityForResult(in, 100); 
     } 
    }); 

} 

// Response from Edit Product Activity 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    // if result code 100 
    if (resultCode == 100) { 
     // if result code 100 is received 
     // means user edited/deleted product 
     // reload this screen again 
     Intent intent = getIntent(); 
     finish(); 
     startActivity(intent); 
    } 

} 

/** 
* Background Async Task to Load all product by making HTTP Request 
* */ 
class LoadAllProducts extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(AllProductsActivity.this); 
     pDialog.setMessage("Loading products. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    /** 
    * getting All products from url 
    * */ 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params); 

     // Check your log cat for JSON response 
     Log.d("All Products: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // products found 
       // Getting Array of Products 
       products = json.getJSONArray(TAG_PRODUCTS); 

       // looping through All Products 
       for (int i = 0; i < products.length(); i++) { 
        JSONObject c = products.getJSONObject(i); 

        // Storing each json item in variable 
        String id = c.getString(TAG_PID); 
        String name = c.getString(TAG_NAME); 

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

        // adding each child node to HashMap key => value 
        map.put(TAG_PID, id); 
        map.put(TAG_NAME, name); 

        // adding HashList to ArrayList 
        productsList.add(map); 
       } 
      } else { 
       // no products found 
       // Launch Add New product Activity 
       Intent i = new Intent(getApplicationContext(), 
         NewProductActivity.class); 
       // Closing all previous activities 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog after getting all products 
     pDialog.dismiss(); 
     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
       * Updating parsed JSON data into ListView 
       * */ 
       ListAdapter adapter = new SimpleAdapter(
         AllProductsActivity.this, productsList, 
         R.layout.list_item, new String[] { TAG_PID, 
           TAG_NAME}, 
         new int[] { R.id.pid, R.id.name }); 
       // updating listview 
       setListAdapter(adapter); 
      } 
     }); 

    } 

} 

}

下面是我的logcat:

11-25 13:59:59.941 10468-10468/com.example.androidhive E/WindowManager: android.view.WindowLeaked: Activity com.example.androidhive.AllProductsActivity has leaked window [email protected][] that was originally added here 
                     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:417) 
                     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:331) 
                     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) 
                     at android.app.Dialog.show(Dialog.java:316) 
                     at com.example.androidhive.AllProductsActivity$LoadAllProducts.onPreExecute(AllProductsActivity.java:117) 
                     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:613) 
                     at android.os.AsyncTask.execute(AsyncTask.java:560) 
                     at com.example.androidhive.AllProductsActivity.onCreate(AllProductsActivity.java:57) 
                     at android.app.Activity.performCreate(Activity.java:6664) 
                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                     at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:154) 
                     at android.app.ActivityThread.main(ActivityThread.java:6077) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

我只是一個初學者,我不知道是什麼導致了錯誤。我已經在網站上搜索解決方案,但似乎這個錯誤是代碼特定的。任何幫助表示讚賞。

+1

檢查初始化它,如果pDialog.dismiss();真的叫 – IIIIIIIIIIIIIIIIIIIIII

+0

我認爲pDialog.dismiss()之前會出現一些問題;並且您不需要onPostExecute內部的runOnUI,因爲onPostExecute已經在UI線程中執行任務。 –

回答

0

問題是在後臺做的,檢查你的其他條件,你從那裏開始另一個活動,所以只要把pDialog.dismiss();啓動另一個活動之前

這種碰撞的背後原因是你對話仍表現出你正在改變活動所以其顯示WindowLeaked錯誤

正如你doInBackground不會允許隱藏對話框,你可以把它藏在的onPause()方法它也將工作

0

發生這種情況是因爲您尚未正確初始化ProgressDialog,或者未正確關閉進度對話框。請確保在onPause()中您撥打pDialog.dismiss();並以此方式進行初始化。的Context

製作對象和onCreate();作爲mContext=YourActivity.this

pDialog= ProgressDialog.show(mContext); 
相關問題