2014-02-18 47 views
0

閱讀所有關於這個問題的文章,但似乎無法找到一個我的狀況相一致,這裏是logcat的:

02-18 18:56:16.872 7331-7331/com.familiestvw.whatson E/WindowManager﹕ Activity com.familiestvw.whatson.GetData has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42de2350 V.E..... R......D 0,0-1026,288} that was originally added here 
android.view.WindowLeaked: Activity com.familiestvw.whatson.GetData has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42de2350 V.E..... R......D 0,0-1026,288} that was originally added here 
     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:450) 
     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258) 
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 
     at android.app.Dialog.show(Dialog.java:287) 
     at com.familiestvw.whatson.GetData$ProgressTask.onPreExecute(GetData.java:64) 
     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
     at android.os.AsyncTask.execute(AsyncTask.java:534) 
     at com.familiestvw.whatson.GetData.onCreate(GetData.java:45) 
     at android.app.Activity.performCreate(Activity.java:5372) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
     at android.app.ActivityThread.access$700(ActivityThread.java:159) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5419) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:525) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
     at dalvik.system.NativeStart.main(Native Method) 

這裏是我的代碼:

public class GetData extends ListActivity { 
private Context context; 
private static String url = "http://localhost/android_connect/get_venues.php"; 

private static final String lblListing_ID = "Listing_ID"; 
private static final String lblEvent_ID = "Event_ID"; 
private static final String lblVenue_ID = "Venue_ID"; 
private static final String lblStart_Date = "Start_Date"; 
private static final String lblEnd_Date = "End_Date"; 
private static final String lblFrequency = "Frequency"; 

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

ListView lv ; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_results); 
    ProgressTask task = new ProgressTask(); 
    task.execute(); 
} 


public class ProgressTask extends AsyncTask<String, Void, Boolean> { 
    ProgressDialog dialog; 

    protected void onPreExecute() { 
     dialog= ProgressDialog.show(GetData.this, "Please Wait","Searching Database", true); 
    } 

    protected Boolean doInBackground(final String... args) { 

     JSONParser jParser = new JSONParser(); 

     // get JSON data from URL 
     JSONArray json = jParser.getJSONFromUrl(url); 

     for (int i = 0; i < json.length(); i++) { 

      try { 
       JSONObject c = json.getJSONObject(i); 
       String Listing_ID = c.getString(lblListing_ID); 
       String Event_ID = c.getString(lblEvent_ID); 
       String Venue_ID = c.getString(lblVenue_ID); 
       String Start_Date = c.getString(lblStart_Date); 
       String End_Date = c.getString(lblEnd_Date); 
       String Frequency = c.getString(lblFrequency); 

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

       // Add child node to HashMap key & value 
       map.put(lblListing_ID, Listing_ID); 
       map.put(lblEvent_ID, Event_ID); 
       map.put(lblVenue_ID, Venue_ID); 
       map.put(lblStart_Date, Start_Date); 
       map.put(lblEnd_Date, End_Date); 
       map.put(lblFrequency, Frequency); 
       jsonlist.add(map); 
      } 
      catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(final Boolean success) { 
      dialog.dismiss(); 
     ListAdapter adapter = new SimpleAdapter(context, jsonlist, 
       R.layout.list_item, new String[] { lblListing_ID , lblEvent_ID, 
       lblVenue_ID, lblStart_Date, lblEnd_Date, lblFrequency }, new int[] { 
       R.id.Listing_ID, R.id.Event_ID, R.id.Venue_ID, 
       R.id.Start_Date, R.id.End_Date, R.id.Frequency }); 

     setListAdapter(adapter); 

     // select single ListView item 
     lv = getListView(); 
    } 


} 

} 猜測的問題很可能是與關閉對話框,但似乎無法得到有效的解決方案。

任何建議,將不勝感激>

回答

1

你在你的onCreate創建進度對話框,並立即顯示它,但你的Activity沒有經過onResume州通過呢。我的建議是將您的進度對話框分開,由Activity開始,並讓AsyncTask只取數據並處理它。完成後,其postExecute回調可以將消息發送到在UI線程上運行的Handler來關閉對話框。還請注意AsyncTask不是生命週期感知的,所以如果在AsyncTask仍在後臺運行時活動暫停或被銷燬,那麼使用當前方法可能會遇到狀態問題和內存泄漏。

+0

感謝您的迴應,我已經更新了代碼,但它仍然沒有任何想法? – JamzDe3rd

+0

如果沒有看到代碼或錯誤,很難說。 –

相關問題