2013-02-13 2 views
1

데이터를 서버로 주기적으로 업데이트하는 서비스 클래스를 설계하고 있습니다. 모든 것이 잘 작동하지만 서버에 "MM/dd/yyyy HH : mm : ss" 형식의 현재 UTC 날짜 시간을 보내야합니다. 이를 달성하기 위해 여러 가지 방법을 시도했지만 원하는 결과를 얻지 못했습니다. 클래스의UTC datetime을 강제로 닫으려고하면 응용 프로그램이 닫힙니다.

소스 코드 :

public class MyAlarmService extends Service { 

     String device_id; 
    // GPSTracker class 
     GPSTracker gps; 

     String date_time; 
@Override 
public void onCreate() { 
// TODO Auto-generated method stub 
    //Toast.makeText(this, "Service created", Toast.LENGTH_LONG).show(); 

    //---get a Record--- 

    } 

@Override 
public IBinder onBind(Intent intent) { 
// TODO Auto-generated method stub 
//Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show(); 
return null; 
} 

@Override 
public void onDestroy() { 
// TODO Auto-generated method stub 
super.onDestroy(); 
//Toast.makeText(this, "Service Destroyed.", Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
// TODO Auto-generated method stub 
super.onStart(intent, startId); 

//Toast.makeText(this, "Service Started.", Toast.LENGTH_LONG).show(); 


//create class object 

gps = new GPSTracker(this); 

    // check if GPS enabled   
    if(gps.canGetLocation()) 
    { 
     double latitude = gps.getLatitude(); 
     double longitude = gps.getLongitude(); 
     String locationUsing = gps.getLocationUsing(); 

     final TelephonyManager tm =(TelephonyManager)getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 

     String deviceid = tm.getDeviceId(); 


//  Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
//  aGMTCalendar.getTimeInMillis(); //or getTimeInMillis() 





     **Date d = new Date(year); 
     CharSequence s = DateFormat.format("yyyy-MM-dd hh:mm:ss", d.getTime());** 

     // get_date(); 






     **SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd"); 
     dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT")); 
     java.util.Date date = null; 
     System.out.println(dateFormatGmt.format(date)); 

     Toast.makeText(getApplicationContext(),""+date, Toast.LENGTH_LONG).show();** 


     //Toast.makeText(getApplicationContext(),"Device ID: "+deviceid+ " Time: "+ s+"\nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 

     Log.w("\nLat: " , ""+latitude); 
     Log.w("\nLong: " , ""+longitude); 

     if(haveNetworkConnection()) 
     { 


     // sendPostRequest(deviceid,date_time,""+latitude,""+longitude); 








//   ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); 
//   
//   nameValuePairs.add(new BasicNameValuePair("lat",""+latitude)); 
//   nameValuePairs.add(new BasicNameValuePair("lng",""+longitude)); 
//   
//   
//   try 
//   { 
//    HttpClient httpclient = new DefaultHttpClient(); 
//    //HttpPost httppost = new HttpPost("http://eatcastle.com/security_system_portal/api/getting_lat_lng.php"); 
//    HttpPost httppost = new HttpPost("http://google.com"); 
//    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
//    HttpResponse response = httpclient.execute(httppost); 
//    String responseBody = EntityUtils.toString(response.getEntity()); 
//    
//    //Toast.makeText(getApplicationContext(),""+responseBody,Toast.LENGTH_LONG).show(); 
//   } 
//   catch (Throwable t) 
//   { 
//    Log.d("Error",""+t); 
//   } 

     } 
     else 
     { 
      Toast.makeText(getApplicationContext(),"No Internet connection or Wifi available",Toast.LENGTH_LONG).show(); 
     } 
    } 
    else 
    { 
     // GPS or Network is not enabled 
     Toast.makeText(getApplicationContext(), "No Network no GPS", Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
public boolean onUnbind(Intent intent) { 
// TODO Auto-generated method stub 
// Toast.makeText(this, "Service binded", Toast.LENGTH_LONG).show(); 
return super.onUnbind(intent); 
} 

//======================================================================================================= 
//check packet data and wifi 
//======================================================================================================= 
private boolean haveNetworkConnection() 
{ 
    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) 
    { 
     if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
      if (ni.isConnected()) 
       haveConnectedWifi = true; 
     if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
      if (ni.isConnected()) 
       haveConnectedMobile = true; 
    } 
    return haveConnectedWifi || haveConnectedMobile; 
} 
//======================================================================================================= 
    //checking packet data and wifi END 
    //======================================================================================================= 


void get_date() 
{ 



} 







//sending async post request 
private void sendPostRequest(String deviceid, String date_time,String latitude, String longitude) { 

    class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{ 

     @Override 
     protected String doInBackground(String... params) { 

      String paramDeviceid = params[0]; 
      String paramDate_time = params[1]; 
      String paramLatitude = params[2]; 
      String paramLongitude = params[3]; 

      //System.out.println("*** doInBackground ** paramUsername " + paramUsername + " paramPassword :" + paramPassword); 

      HttpClient httpClient = new DefaultHttpClient(); 

      // In a POST request, we don't pass the values in the URL. 
      //Therefore we use only the web page URL as the parameter of the HttpPost argument 
      HttpPost httpPost = new HttpPost("http://google.com"); 

      // Because we are not passing values over the URL, we should have a mechanism to pass the values that can be 
      //uniquely separate by the other end. 
      //To achieve that we use BasicNameValuePair    
      //Things we need to pass with the POST request 
      BasicNameValuePair DeviceidBasicNameValuePair = new BasicNameValuePair("stringLoginUser", paramDeviceid); 
      BasicNameValuePair Date_timeBasicNameValuePAir = new BasicNameValuePair("stringLoginPwd", paramDate_time); 
      BasicNameValuePair LatitudeBasicNameValuePAir = new BasicNameValuePair("stringLoginPwd", paramLatitude); 
      BasicNameValuePair LongitudeBasicNameValuePAir = new BasicNameValuePair("stringLoginPwd", paramLongitude); 

      // We add the content that we want to pass with the POST request to as name-value pairs 
      //Now we put those sending details to an ArrayList with type safe of NameValuePair 
      List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); 
      nameValuePairList.add(DeviceidBasicNameValuePair); 
      nameValuePairList.add(Date_timeBasicNameValuePAir); 
      nameValuePairList.add(LatitudeBasicNameValuePAir); 
      nameValuePairList.add(LongitudeBasicNameValuePAir); 

      try { 
       // UrlEncodedFormEntity is an entity composed of a list of url-encoded pairs. 
       //This is typically useful while sending an HTTP POST request. 
       UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList); 

       // setEntity() hands the entity (here it is urlEncodedFormEntity) to the request. 
       httpPost.setEntity(urlEncodedFormEntity); 

       try { 
        // HttpResponse is an interface just like HttpPost. 
        //Therefore we can't initialize them 
        HttpResponse httpResponse = httpClient.execute(httpPost); 



        // According to the JAVA API, InputStream constructor do nothing. 
        //So we can't initialize InputStream although it is not an interface 
        InputStream inputStream = httpResponse.getEntity().getContent(); 

        InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 

        BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

        StringBuilder stringBuilder = new StringBuilder(); 

        String bufferedStrChunk = null; 

        while((bufferedStrChunk = bufferedReader.readLine()) != null){ 
         stringBuilder.append(bufferedStrChunk); 
        } 

        return stringBuilder.toString(); 

       } catch (ClientProtocolException cpe) { 
        System.out.println("First Exception caz of HttpResponese :" + cpe); 
        cpe.printStackTrace(); 
       } catch (IOException ioe) { 
        System.out.println("Second Exception caz of HttpResponse :" + ioe); 
        ioe.printStackTrace(); 
       } 

      } catch (UnsupportedEncodingException uee) { 
       System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee); 
       uee.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

      Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 






     }   
    } 

    SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); 
    sendPostReqAsyncTask.execute(deviceid, date_time,latitude,longitude);  
} 




} 

가 어떻게 위에서 언급 한 형식으로 현재 UTC 날짜 시간을 선택하고 서버로 전송해야합니까?

추신 : 때로는 다른 메서드를 구현하는 동안 새로운 Date() 생성자가 정의되지 않았다는 IDE 오류가 발견되었습니다.

답변

1

null에 날짜 값을 지정 했습니까?

확인이 아웃 :

Date formattedDate = new Date(System.currentTimeMillis()); 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM dd, hh:mm a", Locale.US); 

String time = sdf.format(formattedDate); 
3

당신은 System.currentTimeMillis()을 사용할 수 있습니다,이 1970 년 1 월 1 일 0시 0 분 0 초와 표준시의 시작 (밀리 초)의 긴 숫자를 반환합니다. DateFormats를 사용하여 모든 시간대의 날짜를 문자열로 변환 할 수 있습니다.

DateFormat df = DateFormat.getTimeInstance(); 
df.setTimeZone(TimeZone.getTimeZone("gmt")); 
String gmtTime = df.format(new Date()); 
관련 문제