Преглед изворни кода

1.修改Android Apex Mobile数据加载过程中切换界面导致Crash。

Pen Li пре 7 година
родитељ
комит
5aec2c370a

+ 122 - 86
Apex Mobile/app/src/main/java/com/usai/apex/mainframe/HistoryFragment.java

@@ -3,6 +3,7 @@ package com.usai.apex.mainframe;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.text.TextUtils;
@@ -33,6 +34,113 @@ public class HistoryFragment extends TrackingListFragment {
 //
 //    }
 
+    private class HistoryTask extends AsyncTask<Void, Void, JSONObject> {
+
+        @Override
+        protected void onPreExecute() {
+            super.onPreExecute();
+
+            isLoading = true;
+            showProgressDialog();
+        }
+
+        @Override
+        protected JSONObject doInBackground(Void... voids) {
+
+            final Bundle params = new Bundle();
+            params.putInt("offset",mOffset);
+            params.putInt("limit",load_limit);
+
+            final JSONObject jsobj = Network.request_history(params);
+
+            return jsobj;
+        }
+
+        @Override
+        protected void onPostExecute(JSONObject jsobj) {
+            super.onPostExecute(jsobj);
+
+
+            mPullRefreshListView.completeRefresh();
+            showProgress(false);
+            if (mSwipeRefresh.isRefreshing()) {
+                mSwipeRefresh.setRefreshing(false);
+            }
+
+            dismissProgressDialog();
+
+            if (jsobj != null) {
+
+                try {
+                    int result = jsobj.getInt("result");
+                    if (result == Network.RESULT_TRUE) {
+
+                        JSONArray datalist = jsobj.getJSONArray("container_list");
+                        int count = datalist.length();
+
+                        switch (mOption) {
+                            case 0:
+                            case 1: {
+                                searchresult.clear();
+                            }
+                            break;
+                            case 2: {
+
+                            }
+                            break;
+                        }
+
+                        searchresult.add_records(datalist.toString(), count);
+
+                        if(searchresult.getData().size()==0)
+                        {
+
+                            showRefreshButton(true);
+                        }
+                        else
+                        {
+                            showRefreshButton(false);
+
+                        }
+                        adapter.notifyDataSetChanged();
+
+                        if (count < load_limit && count!=0) {
+                            showAlert("No More Data");
+                        }
+
+                        if(mOption==0)
+                            bdirty = false;
+
+                    } else {
+                        String msg = jsobj.getString("err_msg");
+                        showAlert(msg);
+                    }
+                } catch (JSONException e) {
+                    e.printStackTrace();
+                    showAlert("Sorry,there is some wrong");
+                }
+
+            } else {
+                showAlert("Sorry,there is some wrong");
+            }
+
+            isLoading = false;
+            mTask = null;
+        }
+
+        @Override
+        protected void onCancelled() {
+            super.onCancelled();
+
+            isLoading = false;
+            dismissProgressDialog();
+            mTask = null;
+        }
+    }
+
+    private int mOffset = 0;
+    private int mOption = 0;
+    private HistoryTask mTask;
 
     protected boolean isActive()
     {
@@ -141,106 +249,34 @@ public class HistoryFragment extends TrackingListFragment {
             return;
         }
 
-        int offset = 0;
+        mOffset = 0;
         switch (option) {
             case 0:
             case 1: {
-                offset = 0;
+                mOffset = 0;
             }
             break;
             case 2: {
-                offset = searchresult.get_count();
+                mOffset = searchresult.get_count();
             }
             break;
         }
+        mOption = option;
 
-        final Bundle params = new Bundle();
-        params.putInt("offset",offset);
-        params.putInt("limit",load_limit);
-
-        isLoading = true;
-//        showProgress(true);
-
-        showProgressDialog();
-
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-
-                final JSONObject jsobj = Network.request_history(params);
-
-                ((Activity)mContext).runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-
-                        mPullRefreshListView.completeRefresh();
-                        showProgress(false);
-                        if (mSwipeRefresh.isRefreshing()) {
-                            mSwipeRefresh.setRefreshing(false);
-                        }
-
-                        dismissProgressDialog();
 
-                        if (jsobj != null) {
+        mTask = new HistoryTask();
+        mTask.execute();
 
-                            try {
-                                int result = jsobj.getInt("result");
-                                if (result == Network.RESULT_TRUE) {
-
-                                    JSONArray datalist = jsobj.getJSONArray("container_list");
-                                    int count = datalist.length();
-
-                                    switch (option) {
-                                        case 0:
-                                        case 1: {
-                                            searchresult.clear();
-                                        }
-                                        break;
-                                        case 2: {
-
-                                        }
-                                        break;
-                                    }
-
-                                    searchresult.add_records(datalist.toString(), count);
-
-                                    if(searchresult.getData().size()==0)
-                                    {
-
-                                            showRefreshButton(true);
-                                    }
-                                    else
-                                    {
-                                        showRefreshButton(false);
-
-                                    }
-                                    adapter.notifyDataSetChanged();
-
-                                    if (count < load_limit && count!=0) {
-                                        showAlert("No More Data");
-                                    }
-
-                                    if(option==0)
-                                        bdirty = false;
-
-                                } else {
-                                    String msg = jsobj.getString("err_msg");
-                                    showAlert(msg);
-                                }
-                            } catch (JSONException e) {
-                                e.printStackTrace();
-                                showAlert("Sorry,there is some wrong");
-                            }
+    }
 
-                        } else {
-                            showAlert("Sorry,there is some wrong");
-                        }
-                        isLoading = false;
-                    }
-                });
-            }
-        }).start();
+    @Override
+    public void onDetach() {
+        super.onDetach();
 
+        if (mTask != null) {
+            mTask.cancel(false);
+        }
+        dismissProgressDialog();
     }
 
     @Override

+ 61 - 31
Apex Mobile/app/src/main/java/com/usai/apex/mainframe/KPIFragment.java

@@ -8,6 +8,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.graphics.Color;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -327,6 +328,11 @@ public void checkDirty()
     @Override
     public void onDetach() {
         super.onDetach();
+
+        if (mTask != null) {
+            mTask.cancel(false);
+        }
+        dismissProgressDialog();
     }
 
     @Override
@@ -395,45 +401,69 @@ public void checkDirty()
         }
     }
 
-    private boolean loading = false;
-    private void loadKPIData() {
+    private class KPITask extends AsyncTask<Void, Void, JSONObject> {
 
-        if (loading) {
-            return;
-        }
+        @Override
+        protected void onPreExecute() {
+            super.onPreExecute();
 
-        loading = true;
-//        mLoadIndicator.setVisibility(View.VISIBLE);
+            loading = true;
+            showProgressDialog();
+        }
 
-        showProgressDialog();
+        @Override
+        protected JSONObject doInBackground(Void... voids) {
 
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
+            mData = Network.request_KPI();
+            return mData;
+        }
 
-                mData = Network.request_KPI();
+        @Override
+        protected void onPostExecute(JSONObject jsonObject) {
+            super.onPostExecute(jsonObject);
 
-                ((Activity)mContext).runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (mLoadIndicator.getVisibility() == View.VISIBLE) {
-                            mLoadIndicator.setVisibility(View.GONE);
-                        }
-                        if (mSwipeRefresh.isRefreshing()) {
-                            mSwipeRefresh.setRefreshing(false);
-                        }
-                        dismissProgressDialog();
-                        prepareData();
-//                        if (mKPIArr != null && mKPIArr.size() > 0) {
-//                            mKPIPager.setCurrentItem(currentKPI,false);
-//                        }
-                        loading = false;
-                        bdirty = false;
-                    }
-                });
+            if (mLoadIndicator.getVisibility() == View.VISIBLE) {
+                mLoadIndicator.setVisibility(View.GONE);
+            }
+            if (mSwipeRefresh.isRefreshing()) {
+                mSwipeRefresh.setRefreshing(false);
             }
-        }).start();
+            dismissProgressDialog();
+            prepareData();
+
+            loading = false;
+            bdirty = false;
+            mTask = null;
+        }
+
+        @Override
+        protected void onCancelled() {
+            super.onCancelled();
+
+            loading = false;
+            dismissProgressDialog();
+            mTask = null;
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+    }
+
+    private KPITask mTask;
+
+    private boolean loading = false;
+    private void loadKPIData() {
+
+        if (loading) {
+            return;
+        }
+
 
+        mTask = new KPITask();
+        mTask.execute();
     }
 
     private void prepareData() {

+ 65 - 62
Apex Mobile/app/src/main/java/com/usai/apex/mainframe/RecentFragment.java

@@ -3,6 +3,7 @@ package com.usai.apex.mainframe;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.text.TextUtils;
@@ -30,6 +31,58 @@ import java.util.Map;
 public class RecentFragment extends TrackingListFragment {
 
 
+    /**
+     * Param 0 启动任务时输入的参数类型
+     * Param 1 后台任务执行中返回进度值的类型
+     * Param 2 后台任务执行完成后返回结果的类型
+     * */
+    private class RecentTask extends AsyncTask<Void, Void, JSONObject> {
+
+        @Override
+        protected void onPreExecute() {
+            super.onPreExecute();
+            isLoading = true;
+            showProgressDialog();
+        }
+
+        @Override
+        protected JSONObject doInBackground(Void... voids) {
+
+            final JSONObject jsobj = Network.request_home();
+            return jsobj;
+        }
+
+        @Override
+        protected void onPostExecute(JSONObject jsobj) {
+
+            showProgress(false);
+            if (mSwipeRefresh.isRefreshing()) {
+                mSwipeRefresh.setRefreshing(false);
+            }
+
+            if (jsobj != null) {
+                handleJson(jsobj);
+                bdirty = false;
+            } else {
+                showAlert("Sorry,there is some wrong");
+            }
+
+            isLoading = false;
+            dismissProgressDialog();
+            mTask = null;
+        }
+
+        @Override
+        protected void onCancelled() {
+            super.onCancelled();
+
+            isLoading = false;
+            dismissProgressDialog();
+            mTask = null;
+        }
+    }
+
+    private RecentTask mTask;
 
     protected boolean isActive()
     {
@@ -143,73 +196,23 @@ public class RecentFragment extends TrackingListFragment {
             }
             return;
         }
-        isLoading = true;
-//        showProgress(true);
-        showProgressDialog();
-
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-
-                final JSONObject jsobj = Network.request_home();
-
-                ((Activity)mContext).runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-
-                        showProgress(false);
-                        if (mSwipeRefresh.isRefreshing()) {
-                            mSwipeRefresh.setRefreshing(false);
-                        }
-
-                        dismissProgressDialog();
-
-                        if (jsobj != null) {
-                            handleJson(jsobj);
-                            bdirty = false;
-                        } else {
-                            showAlert("Sorry,there is some wrong");
-                        }
-                        isLoading = false;
-                    }
-                });
-            }
-        }).start();
-
-//
-//        JSONObject jsobj = loadfakecontent(R.raw.fake_container_list);
-//        // if (searchresult.get_fieldscount() == 0)
-//        // {
-//        // JSONObject objfields = jsobj.getJSONObject("fields");
-//        // if (objfields != null)
-//        // searchresult.init_fields(objfields.toString());
-//        // }
-//
-//
-//        try {
-//            JSONArray datalist = jsobj.getJSONArray("container_list");
-//            int count = datalist.length();
-//            searchresult.add_records(datalist.toString(), count);
-//
-//        } catch (JSONException e) {
-//            e.printStackTrace();
-//        }
-//
-////        int count = jsobj.getInt("total");
-////
-////        if (count < limit)
-////            bfinish = true;
-////        JSONObject objrecords = jsobj.getJSONObject("records");
-////        if (objrecords != null)
-////            searchresult.add_records(objrecords.toString(), count);
-////        errorcode = Network.RESULT_TRUE;
-//
-//        adapter.notifyDataSetChanged();
 
+        mTask = new RecentTask();
+        mTask.execute();
 
         super.requestData();
     }
 
+    @Override
+    public void onDetach() {
+        super.onDetach();
+
+        if (mTask != null) {
+            mTask.cancel(false);
+        }
+        dismissProgressDialog();
+    }
+
     @Override
     protected View initHeaderView()
     {