I am getting class cat exception while running the following code. I
checked the code but everything was fine . Can any one please help me
out



public class GPSsens extends Service
{

    /** Name of the service used for logging */
    private static final String TAG = "SystemSensService";

    /** Version of the JSON records */
    private static final String VER = "1.4";


    /** Types of messages used by this service */
    private static final int USAGESTAT_MSG    = 1;
    private static final int UPLOAD_START_MSG = 2;
    private static final int UPLOAD_END_MSG   = 3;
    private static final int BATHIST_MSG      = 4;
    private static final int PROC_MSG         = 5;

    /** String names of JSON records */
    private static final String USAGESTAT_TYPE = "usage";
    private static final String NETTRANS_TYPE = "transmission";
    private static final String NETRECV_TYPE = "receive";
    private static final String CPUSTAT_TYPE = "cpu";
    private static final String GPSSTAT_TYPE = "gps";
    private static final String SENSORSTAT_TYPE = "sensor";
    private static final String BATTERY_TYPE = "battery";
    private static final String SCREEN_TYPE = "screen";
    private static final String NET_TYPE = "network";
    private static final String CALL_TYPE = "call";
    private static final String SYSTEMSENS_TYPE = "systemsens";
    private static final String NETDEV_TYPE = "netdev";



    /** Intervals used for timers in seconds */
    private long USAGESTAT_INTERVAL;
    private long BATHIST_INTERVAL;
    private long PROC_INTERVAL;

    /** Default values for timers in seconds */
    private static final long DEFAULT_USAGESTAT_INTERVAL = 120000;
    private static final long DEFAULT_BATHIST_INTERVAL = 120000;
    private static final long DEFAULT_PROC_INTERVAL = 120000;



    /** Power manager object used to acquire a partial wakeLock */
    private PowerManager m_PM;

    /** WakeLock object */
    private PowerManager.WakeLock m_WL;


    /** State variable set when a worker thread starts uploading */
    private boolean mIsUploading;

    /** Usage statistics object */
    private Usage mUsageStat;

    /** Battery History object */
    private History mHistoryStat;

    /** Proc object */
    private Proc mProc;

    /** Uploader Object */
    //private SystemSensUploader mUploader;

    /** Dumper Object -- used for debugging */
    private SystemSensDumper mDumper;


    /** Database adaptor object */
    private SystemSensDbAdaptor mDbAdaptor;

    /** Holds the IMEI of the device */
    private String IMEI;


    /** telephonyManager object */
    private TelephonyManager telManager;

    //private SystemSensLogger logger;

    /** Battery information record for reporting to the activity */
    private JSONObject batteryJson;

    /**
     * Class for clients to access.  Because we know this service
always
     * runs in the same process as its clients, we don't need to deal
with
     * IPC.
     */
    public class LocalBinder extends Binder {
        GPSsens getService() {
            return GPSsens.this;
        }
    }

    @Override
    public void onStart(Intent intent, int startId)
    {
        super.onStart(intent, startId);
        Log.i(TAG, "onStart");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate");


        // Set the default intervals for USAGE and BATHIST counters
        USAGESTAT_INTERVAL = DEFAULT_USAGESTAT_INTERVAL;
        BATHIST_INTERVAL =  DEFAULT_BATHIST_INTERVAL;
        PROC_INTERVAL =  DEFAULT_PROC_INTERVAL;

        /* This object is used to log call durations */
  /*      telManager =
 
(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);

        this.IMEI = telManager.getDeviceId(); */

        mIsUploading = false;

        mDbAdaptor = new SystemSensDbAdaptor(this);

        //mUploader = new SystemSensUploader(mDbAdaptor);

        mDumper = new SystemSensDumper(mDbAdaptor, this);

        mUsageStat = new Usage();
        mHistoryStat = new History(this);
        mProc = new Proc();


        try
        {
            mDbAdaptor.open();
        }
        catch (SQLException e)
        {
            Log.e(TAG, "Exception", e);
        }

        // Register for battery updates
   //     registerReceiver(mBatteryInfoReceiver, new IntentFilter(
     //               Intent.ACTION_BATTERY_CHANGED));


        // Register for screen updates


        // Start getting process information
       /*Message msg1 = mHandler.obtainMessage(USAGESTAT_MSG);
        long nextTime = SystemClock.uptimeMillis()
            + USAGESTAT_INTERVAL;
        mHandler.sendMessageAtTime(msg1, nextTime);*/

        // Start getting process information
        Message msg2 = mHandler.obtainMessage(BATHIST_MSG);
        long nextTime = SystemClock.uptimeMillis()
            + BATHIST_INTERVAL;
        mHandler.sendMessageAtTime(msg2, nextTime);

        // Start getting network device information
     /*   Message msg3 = mHandler.obtainMessage(PROC_MSG);
        nextTime = SystemClock.uptimeMillis()
            + PROC_INTERVAL;
        mHandler.sendMessageAtTime(msg3, nextTime);*/




        // Log a message indicating starting SystemSens
        JSONObject sysJson = new JSONObject();
        try
        {
            sysJson.put("state", "started");
        }
        catch (JSONException e)
        {
            Log.e(TAG, "Exception", e);
        }


        // Acquire a partial wake lock
        m_PM = (PowerManager) getSystemService(Context.POWER_SERVICE);
        m_WL = m_PM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "SystemSense");

        m_WL.acquire();

        mDbAdaptor.createEntry( constructDataRecord(
                    sysJson, SYSTEMSENS_TYPE));

        Cursor c =mDbAdaptor.fetchAllEntries();{

            if (c.moveToFirst())
             {
                 do {
                  Toast.makeText(this,
                                "sys sens type " + c.getString(0) + "\n"+ "gps 
stat
" + c.getString(0) + "\n"
                           ,Toast.LENGTH_LONG).show();

                 } while (c.moveToNext());
             }

        };

    }

    @Override
    public void onDestroy() {

        // Clear the message handler's pending messages
      //  mHandler.removeMessages(USAGESTAT_MSG);
        mHandler.removeMessages(BATHIST_MSG);

   //     unregisterReceiver(mBatteryInfoReceiver);


        mDbAdaptor.close();

        // Log a message indicating killing SystemSens
        JSONObject sysJson = new JSONObject();
        try
        {
            sysJson.put("state", "killed");
        }
        catch (JSONException e)
        {
            Log.e(TAG, "Exception", e);
        }

        mDbAdaptor.createEntry( constructDataRecord(
                    sysJson, SYSTEMSENS_TYPE));

        m_WL.release();


        Log.i(TAG, "Killed");
        Cursor c =mDbAdaptor.fetchAllEntries();{

            if (c.moveToFirst())
             {
                 do {
                  Toast.makeText(this,
                                "sys sens type " + c.getString(0) + "\n"+ "gps 
stat
" + c.getString(0) + "\n"
                           ,Toast.LENGTH_LONG).show();

                 } while (c.moveToNext());
             }

        };

    }

    private String constructDataRecord(JSONObject data, String type) {
                // TODO Auto-generated method stub
         JSONObject dataRecord = new JSONObject();

         // First thing, get the current time
         final Calendar c = Calendar.getInstance();
         String timeStr = "" +
             c.get(Calendar.YEAR) + "-" +
             c.get(Calendar.MONTH) + "-" +
             c.get(Calendar.DAY_OF_MONTH) + " " +
             c.get(Calendar.HOUR_OF_DAY) + ":" +
             c.get(Calendar.MINUTE) + ":" +
             c.get(Calendar.SECOND);

         try
         {
             dataRecord.put("date", timeStr);
             dataRecord.put("time_stamp", c.getTimeInMillis());
             dataRecord.put("user", IMEI);
             dataRecord.put("type", type);
             dataRecord.put("ver", VER);
             dataRecord.put("data", data);
         }
         catch (JSONException e)
         {
             Log.e(TAG, "Exception", e);
         }

         return dataRecord.toString();

        }

        @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    /** This is the object that receives interactions from clients. */
    private final IBinder mBinder = new LocalBinder();


    /**
     * Broadcast receiver for Battery information updates.
     * An object of this class has been passed to the system through
     * registerReceiver.
     *
     */


    private final Handler mHandler = new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            /* Get usage stat */
            if (msg.what == USAGESTAT_MSG)
            {

                // DEBUG
                //Log.i(TAG, "Received MSG" + msg.toString());

                // Get system information here and insert to database
                HashMap<String, Long> usageMap = mUsageStat.getStat();
                mDbAdaptor.createEntry( constructDataRecord(
                            new JSONObject(usageMap),
                            USAGESTAT_TYPE));


                // Schedule a new timer
                msg = obtainMessage(USAGESTAT_MSG);
                long nextTime = SystemClock.uptimeMillis()
                    + USAGESTAT_INTERVAL;
                sendMessageAtTime(msg, nextTime);
            }
            if (msg.what == BATHIST_MSG)
            {
                // Get send and receive information and insert to
database
                mHistoryStat.update();
                JSONObject gpsMap = mHistoryStat.getGpsInfo();
               // JSONObject sensorMap = mHistoryStat.getSensorInfo();

                mDbAdaptor.createEntry( constructDataRecord(
                            gpsMap,
                            GPSSTAT_TYPE));



                // Schedule a new timer
                msg = obtainMessage(BATHIST_MSG);
                long nextTime = SystemClock.uptimeMillis()
                    + BATHIST_INTERVAL;
                sendMessageAtTime(msg, nextTime);


            }



        }
    };



    /** Format a number of tenths-units as a decimal string without
using a
     *  conversion to float.  E.g. 347 -> "34.7"
     *
     *  @param          intVal
     *  @return         String representing the decimal
     */
    private final String tenthsToFixedString(int intVal) {
        int tens = intVal / 10;
        return new String("" + tens + "." + (intVal - 10*tens));
    }

    public JSONObject getBatteryInfo()
    {
        return batteryJson;
    }


    public String getHistInfo()
    {
        mHistoryStat.update();
        /*
        String result = "CPU: " +
mHistoryStat.getCpuInfo().toString();

        result += "\nRecv: " + mHistoryStat.getRecvInfo().toString()
            + "\nSent: " + mHistoryStat.getSentInfo().toString();
        */

        mHistoryStat.update();
        String result = "GPS: " +
mHistoryStat.getGpsInfo().toString();

        return result;
    }




    /**
     * Spawns a worker thread to "try" to write the contents of the
     * database in a flat file.
     * Before starting the thread, checks if a worker thread is
     * already trying to dump. If so, returns. Otherwise a new
     * thread is spawned and tasked with the dump job.
     *
     * This should only be used for debugging. It should NOT be used
     * along with the upload method. Either dump() or upload() should
     * be called.
     *
     */
    private void dump()
    {
        if (!mIsUploading)
        {
            Thread uploaderThread = new Thread()
            {
                public void run()
                {
                    // Send an immediate message to the main thread
                    // to inform that a worker thread is running.
 
mHandler.sendMessageAtTime( mHandler.obtainMessage(
                                UPLOAD_START_MSG),
                            SystemClock.uptimeMillis());


                    Log.i(TAG, "Worker thread started dump task");
                    mDumper.tryDump();

                    // Send an immediate message to the main thread to
                    // inform that the worker thread is finished.
 
mHandler.sendMessageAtTime( mHandler.obtainMessage(
                                UPLOAD_END_MSG),
                            SystemClock.uptimeMillis());
                }
            };

            uploaderThread.start();

        }
        else
        {
            Log.i(TAG, "Dump in progress ...");
        }
    }


    }





-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to