在刷卡上连接到Mysql数据库的第二个片段上,AsyncTask无法正常运行

时间:2014-02-12 03:35:53

标签: android android-asynctask android-viewpager swipe

我有一个带有三个片段的应用程序,我需要Asynctask每次刷卡。但似乎Asynctask只在应用程序的开放时运行。但是当它已经创建时,只有第一个和第三个片段在AsyncTask中运行良好,第二个片段在更新数据库时不会改变。

这是我的 MainActivity.java

    package com.example.RadarOperationMonitoringSystem;

    import android.app.ActionBar;
    import android.app.FragmentTransaction;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.view.ViewPager;

    /**
     * Created by Lemueloodle on 2/12/14.
     */
    public class MainActivity extends FragmentActivity{
        ViewPager Tab;
        TabPagerAdapter TabAdapter;
        ActionBar actionBar;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
            Tab = (ViewPager)findViewById(R.id.viewPager);
            Tab.setOnPageChangeListener(
                    new ViewPager.SimpleOnPageChangeListener() {
                        @Override
                        public void onPageSelected(int position) {
                            actionBar = getActionBar();
                            actionBar.setSelectedNavigationItem(position);                    }
                    });
            Tab.setAdapter(TabAdapter);
            actionBar = getActionBar();
            //Enable Tabs on Action Bar
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            ActionBar.TabListener tabListener = new ActionBar.TabListener(){
                @Override
                public void onTabReselected(android.app.ActionBar.Tab tab,
                                            FragmentTransaction ft) {
                    // TODO Auto-generated method stub

                }
                @Override
                public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
                    Tab.setCurrentItem(tab.getPosition());

                }
                @Override
                public void onTabUnselected(android.app.ActionBar.Tab tab,
                                            FragmentTransaction ft) {
                    // TODO Auto-generated method stub

                }};
            //Add New Tab
            actionBar.addTab(actionBar.newTab().setText("FirstFragment").setTabListener(tabListener));
            actionBar.addTab(actionBar.newTab().setText("SecondFragment").setTabListener(tabListener));
            actionBar.addTab(actionBar.newTab().setText("ThirdFragment").setTabListener(tabListener));
        }
    }

这是我的 TabPagerAdapter

package com.example.RadarOperationMonitoringSystem;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

/**
 * Created by Lemueloodle on 2/12/14.
 */
public class TabPagerAdapter extends FragmentStatePagerAdapter {
    public TabPagerAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }
    @Override
    public Fragment getItem(int i) {
        switch(i) {

            case 0:
                return new FirstFragment();
            case 1:
                return new SecondFragment();
            case 2:
                return new ThirdFragment();
        }
        return null;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 3; //No of Tabs
    }
}

这是我的 FirstFragment.java

package com.example.RadarOperationMonitoringSystem;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FirstFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View first = inflater.inflate(R.layout.first_frag, container, false);

// get the listview
        ((TextView)first.findViewById(R.id.textView)).setText("SecondFragment");

        return first;
    }

}

SecondFragment.java

package com.example.RadarOperationMonitoringSystem;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class SecondFragment extends ListFragment {

    private ProgressDialog pDialog;

    // URL to get contacts JSON
    private static final String url = "http://10.0.2.2/radaroperations/networkstatus.php";

    private static final String TAG_SITENAME1 = "siteName1";
    private static final String TAG_NETSTAT1 = "netlink_stats1";
    private static final String TAG_FORECAST1 = "forcasting_stats1";
    private static final String TAG_MDSI1 = "pagasa_mdsi_stats1";
    private static final String TAG_PNOAH1 = "projectnoah_stats1";

   ....so on


    String site1 = "";
    String netstat1 = "";
    String forecast1 = "";
    String mdsi1 = "";
    String pnoah1 = "";

 .....so on

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



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View second = inflater.inflate(R.layout.second_frag, container, false);
        ((TextView)second.findViewById(R.id.textView)).setText("SecondFragment");

        return second;

    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // We set clear listener

        new GetContactsb().execute();

    }



    public class GetContactsb extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(true);
            pDialog.show();

        }
        @Override
        public Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            ServiceHandler2 sh = new ServiceHandler2();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url, ServiceHandler2.GET);

            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject c = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    site1 = c.getString(TAG_SITENAME1);
                    netstat1 = c.getString(TAG_NETSTAT1);
                    forecast1 = c.getString(TAG_FORECAST1);
                    mdsi1 = c.getString(TAG_MDSI1);
                    pnoah1 = c.getString(TAG_PNOAH1);

                   ..so on
                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    contact.put(TAG_SITENAME1, site1);
                    contact.put(TAG_NETSTAT1, netstat1);
                    contact.put(TAG_FORECAST1, forecast1);
                    contact.put(TAG_MDSI1, mdsi1);
                    contact.put(TAG_PNOAH1, pnoah1);

                   ...so on

                    // adding contact to contact list
                    contactList.clear();
                    contactList.add(contact);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }

        @Override
        public void onPostExecute(Void result) {
            super.onPostExecute(result);

            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             *
             */

            ListAdapter adapter = new SimpleAdapter(
                    getActivity(), contactList,
                    R.layout.list_item2, new String[] { TAG_SITENAME1,TAG_SITENAME2,TAG_SITENAME3,TAG_SITENAME4,
                    TAG_SITENAME5,TAG_SITENAME6,TAG_SITENAME7},
                    new int[] { R.id.sitename1, R.id.sitename2, R.id.sitename3, R.id.sitename4,R.id.sitename5,
                            R.id.sitename6, R.id.sitename7}){

                //This will change the color of the value depending on the limit given
                public View getView(int position, View convertView, ViewGroup parent) {
                    View view = super.getView(position, convertView, parent);

                    TextView netstata = (TextView) view.findViewById(R.id.netstat1);
                    TextView forecasta = (TextView) view.findViewById(R.id.forecast1);
                    TextView mdsia = (TextView) view.findViewById(R.id.pmdsi1);
                    TextView pnoaha = (TextView) view.findViewById(R.id.pnoah1);
....so on

                    //1 - Red = No link
                    //2 - Yellow = Delay
                    //3 - Green = Good

                    //Radar 1
                    //Network Link Status
                    if (netstat1.equals("1")){
                        netstata.setText("No-Link");
                        netstata.setTextColor(getResources().getColor(R.color.red));
                    }
                    else if(netstat1.equals("2")){
                        netstata.setText("Delay");
                        netstata.setTextColor(getResources().getColor(R.color.yellow));
                    }
                    else if(netstat1.equals("3")){
                        netstata.setText("Good");
                        netstata.setTextColor(getResources().getColor(R.color.green));
                    }
                   ...so on to Radar 7

                    return view;

                };

            };

            // updating listviews
            setListAdapter(adapter);
        }


    }
}

ThirdFragment.java

package com.example.RadarOperationMonitoringSystem;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;


public class ThirdFragment extends ListFragment {

    private ProgressDialog pDialog;

    // URL to get contacts JSON
    private static final String url = "http://10.0.2.2/radaroperations/energyreadings.php";

    private static final String TAG_SITENAME1 = "siteName1";
    private static final String TAG_FREQUENCY1 = "Frequency1";
    private static final String TAG_ACCURRENT1 = "AC_Voltage1";
    private static final String TAG_ACVOLTAGE1 = "AC_Current1";
    private static final String TAG_FSTAT1 = "Flimitstat1";
    private static final String TAG_VSTAT1 = "Vlimitstat1";
    private static final String TAG_CSTAT1 = "Climitstat1";

   ...so on

    // contacts JSONArray
    JSONObject c = null;

    String site1 = "";
    String freq1 = "";
    String curr1 = "";
    String volts1 = "";
    String fstat1 = "";
    String vstat1 = "";
    String cstat1 = "";

   .. so on

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View third = inflater.inflate(R.layout.third_frag, container, false);

        ((TextView)third.findViewById(R.id.textView)).setText("ThirdFragment");

        return third;

    }
    public void StartProgress() {
        new GetContactsc().execute();
    }
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // We set clear listener



        new GetContactsc().execute();

    }
    public class GetContactsc extends AsyncTask<Void, Void, Void> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(true);
            pDialog.show();

        }
        @Override
        public Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            ServiceHandler3 sh = new ServiceHandler3();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url, ServiceHandler3.GET);

            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject c = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    site1 = c.getString(TAG_SITENAME1);
                    freq1 = c.getString(TAG_FREQUENCY1);
                    curr1 = c.getString(TAG_ACCURRENT1);
                    volts1 = c.getString(TAG_ACVOLTAGE1);
                    fstat1 = c.getString(TAG_FSTAT1);
                    vstat1 = c.getString(TAG_VSTAT1);
                    cstat1 = c.getString(TAG_CSTAT1);

                   ...so on

                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    contact.put(TAG_SITENAME1, site1);
                    contact.put(TAG_FREQUENCY1, freq1);
                    contact.put(TAG_ACCURRENT1, curr1);
                    contact.put(TAG_ACVOLTAGE1, volts1);
                    contact.put(TAG_FSTAT1, fstat1);
                    contact.put(TAG_VSTAT1, vstat1);
                    contact.put(TAG_CSTAT1, cstat1);

                  ...so on 

                    // adding contact to contact list
                    contactList.clear();
                    contactList.add(contact);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }
        @Override
        public void onPostExecute(Void result) {
            super.onPostExecute(result);

            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             *
             */


            ListAdapter adapter = new SimpleAdapter(
                    getActivity(), contactList,
                    R.layout.list_item, new String[] { TAG_SITENAME1, TAG_FREQUENCY1, TAG_ACCURRENT1,
                    TAG_ACVOLTAGE1,TAG_SITENAME2, TAG_FREQUENCY2, TAG_ACCURRENT2,
                    TAG_ACVOLTAGE2,TAG_SITENAME3, TAG_FREQUENCY3, TAG_ACCURRENT3,
                    TAG_ACVOLTAGE3, TAG_SITENAME4, TAG_FREQUENCY4, TAG_ACCURRENT4,
                    TAG_ACVOLTAGE4, TAG_SITENAME5, TAG_FREQUENCY5, TAG_ACCURRENT5,
                    TAG_ACVOLTAGE5, TAG_SITENAME6, TAG_FREQUENCY6, TAG_ACCURRENT6,
                    TAG_ACVOLTAGE6, TAG_SITENAME7, TAG_FREQUENCY7, TAG_ACCURRENT7,
                    TAG_ACVOLTAGE7},
                    new int[] { R.id.sitename1, R.id.frequency1,
                            R.id.accurrent1, R.id.acvoltage1, R.id.sitename2, R.id.frequency2,
                            R.id.accurrent2, R.id.acvoltage2, R.id.sitename3, R.id.frequency3,
                            R.id.accurrent3, R.id.acvoltage3, R.id.sitename4, R.id.frequency4,
                            R.id.accurrent4, R.id.acvoltage4, R.id.sitename5, R.id.frequency5,
                            R.id.accurrent5, R.id.acvoltage5, R.id.sitename6, R.id.frequency6,
                            R.id.accurrent6, R.id.acvoltage6, R.id.sitename7, R.id.frequency7,
                            R.id.accurrent7, R.id.acvoltage7}){

                //This will change the color of the value depending on the limit given
                public View getView(int position, View convertView, ViewGroup parent) {
                    View view = super.getView(position, convertView, parent);

                    TextView freqa = (TextView) view.findViewById(R.id.frequency1);
                    TextView voltsa = (TextView) view.findViewById(R.id.acvoltage1);
                    TextView curra = (TextView) view.findViewById(R.id.accurrent1);
                    ... so on

                    //Radar 1
                    if (fstat1.equals("1")){
                        freqa.setTextColor(getResources().getColor(R.color.green));
                    }
                    else if(fstat1.equals("2")){
                        freqa.setTextColor(getResources().getColor(R.color.red));
                    }
                    if(vstat1.equals("1")){
                        voltsa.setTextColor(getResources().getColor(R.color.green));
                    }
                    else if(vstat1.equals("2")){
                        voltsa.setTextColor(getResources().getColor(R.color.red));
                    }
                    if(cstat1.equals("1")){
                        curra.setTextColor(getResources().getColor(R.color.green));
                    }
                    else if(cstat1.equals("2")){
                        curra.setTextColor(getResources().getColor(R.color.red));
                    }

                   ... so on to Radar 7

                    return view;

            };

            };

            // updating listviews
            setListAdapter(adapter);


        }

    }



}

1 个答案:

答案 0 :(得分:0)

我遇到了和你一样的问题。我认为这个问题是因为ViewPager保存了上一个和下一个寻呼机的状态,并在它们到来之前构建它们。尝试设置tab.setOffscreenPageLimit(0)。通过这样做,你可能会遇到一个问题,即当你刷页面时,页面将被重建。