2013-03-31 49 views
0

Okayyyy,所以我堅持,並可能與一些幫助:)運用的DatePicker日在url日出/日落web服務

在我此刻的代碼做今天的日期被讀入的web服務URL使用下面的代碼片段:

Calendar c = Calendar.getInstance(); 
System.out.println("Current time => " + c.getTime()); 
SimpleDateFormat df = new SimpleDateFormat("dd/MM"); 
String formattedDate = df.format(c.getTime()); 

我要顯示當天的日期,但我也希望用戶能夠選擇從DatePicker的其他日期,然後找到日出/日落值特定的日期。

我猜這很簡單,我只是作爲一個有點暗淡所以任何幫助,將不勝感激,這裏是我的代碼:

package richgrundy.learnphotography; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.StringReader; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.HttpContext; 
import org.w3c.dom.Document; 
import org.xml.sax.InputSource; 

import android.app.Activity; 
import android.app.FragmentTransaction; 
import android.content.Context; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class SunriseSunset extends Activity implements OnClickListener { 

    public Button getLocation; 
    public Button setLocationJapan; 
    public TextView LongCoord; 
    public TextView LatCoord; 
    public double longitude; 
    public double latitude; 
    public LocationManager lm; 
    public Spinner Locationspinner; 
    public DateDialogFragment frag; 
    public Button date; 
    public Calendar now; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sunrisesunset); 

     //Setting onClickListener for Calculate Sunrise/Sunset Button 
     findViewById(R.id.CalculateSunriseSunset).setOnClickListener(this); 

     //Sets up LocationManager to enable GPS data to be accessed. 
     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, 
       new MyLocationListener()); 

     //Declares Latitude and Longitude TextViews 
     LatCoord = (TextView) findViewById(R.id.LatCoord); 
     LongCoord = (TextView) findViewById(R.id.LongCoord); 

     //Declares for Location Spinner/Dropdown 
     addListenerOnSpinnerItemSelection(); 

     //Date 
     now = Calendar.getInstance(); 
     date = (Button)findViewById(R.id.date_button); 
     date.setText(String.valueOf(now.get(Calendar.DAY_OF_MONTH)+1)+"-"+String.valueOf(now.get(Calendar.MONTH))+"-"+String.valueOf(now.get(Calendar.YEAR))); 
     date.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       showDialog(); 
      } 
     }); 

    } 
    // More date 
    public void showDialog() { 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); //get the fragment 
     frag = DateDialogFragment.newInstance(this, new DateDialogFragmentListener(){ 
      public void updateChangedDate(int year, int month, int day){ 
       date.setText(String.valueOf(day)+"-"+String.valueOf(month+1)+"-"+String.valueOf(year)); 
       now.set(year, month, day); 
      } 
     }, now); 

     frag.show(ft, "DateDialogFragment"); 

    } 

    public interface DateDialogFragmentListener{ 
     //this interface is a listener between the Date Dialog fragment and the activity to update the buttons date 
     public void updateChangedDate(int year, int month, int day); 
    } 

    public void addListenerOnSpinnerItemSelection() { 
     Locationspinner = (Spinner) findViewById(R.id.Locationspinner); 
     Locationspinner 
       .setOnItemSelectedListener(new CustomOnItemSelectedListener(
         this)); 
    } 

    public void setLocationFrance() { 
     // TODO Auto-generated method stub 
     LatCoord.setText("65.4112"); 
     LongCoord.setText("85.8337"); 
    } 

    public void setLocationIndia() { 
     // TODO Auto-generated method stub 
     LatCoord.setText("21.4112"); 
     LongCoord.setText("105.8337"); 
    } 

    public void setLocationJapan() { 
     // TODO Auto-generated method stub 
     LatCoord.setText("21.4112"); 
     LongCoord.setText("15.8337"); 
    } 

    protected void showCurrentLocation() { 
     // This is called to find current location based on GPS data and sends 
     // this to LongCoord and LatCoord TextViews 
     Location location = lm 
       .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 

     LongCoord.setText(Double.toString(longitude)); 
     LatCoord.setText(Double.toString(latitude)); 
    } 

    @Override 
    public void onClick(View arg0) { 
     Button b = (Button) findViewById(R.id.CalculateSunriseSunset); 
     b.setClickable(false); 
     new LongRunningGetIO().execute(); 
    } 

    private class LongRunningGetIO extends AsyncTask<Void, Void, String> { 

     protected String getASCIIContentFromEntity(HttpEntity entity) 
       throws IllegalStateException, IOException { 
      InputStream in = entity.getContent(); 
      StringBuffer out = new StringBuffer(); 
      int n = 1; 
      while (n > 0) { 
       byte[] b = new byte[4096]; 
       n = in.read(b); 
       if (n > 0) 
        out.append(new String(b, 0, n)); 
      } 
      return out.toString(); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 

      // Finds todays date and adds that into the URL 
      Calendar c = Calendar.getInstance(); 
      System.out.println("Current time => " + c.getTime()); 
      SimpleDateFormat df = new SimpleDateFormat("dd/MM"); 
      String formattedDate = df.format(c.getTime()); 

      String finalURL = "http://www.earthtools.org/sun/" 
        + LatCoord.getText().toString().trim() + "/" 
        + LongCoord.getText().toString().trim() + "/" 
        + formattedDate + "/99/0"; 
      HttpGet httpGet = new HttpGet(finalURL); 
      String text = null; 

      try { 
       HttpResponse response = httpClient.execute(httpGet, 
         localContext); 
       HttpEntity entity = response.getEntity(); 
       text = getASCIIContentFromEntity(entity); 
      } catch (Exception e) { 
       return e.getLocalizedMessage(); 
      } 
      return text; 
     } 

     protected void onPostExecute(String results) { 
      if (results != null) { 
       try { 

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
          .newInstance(); 
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
        InputSource s = new InputSource(new StringReader(results)); 
        Document doc = dBuilder.parse(s); 
        doc.getDocumentElement().normalize(); 
        TextView tvSunrise = (TextView) findViewById(R.id.Sunrise); 
        TextView tvSunset = (TextView) findViewById(R.id.Sunset); 
        tvSunrise.setText(doc.getElementsByTagName("sunrise").item(0).getTextContent()); 
        tvSunset.setText(doc.getElementsByTagName("sunset").item(0).getTextContent()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      Button b = (Button) findViewById(R.id.CalculateSunriseSunset); 
      b.setClickable(true); 
     } 
    } 

    class MyLocationListener implements LocationListener { 
     @Override 
     public void onLocationChanged(Location location) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 
     } 
    } 
} 

DateFragmentDialog:

package richgrundy.learnphotography; 


import java.util.Calendar; 

import richgrundy.learnphotography.SunriseSunset.DateDialogFragmentListener; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.Context; 
import android.os.Bundle; 
import android.widget.DatePicker; 

public class DateDialogFragment extends DialogFragment { 

    public static String TAG = "DateDialogFragment"; 
    static Context mContext; //I guess hold the context that called it. Needed when making a DatePickerDialog. I guess its needed when conncting the fragment with the context 
    static int mYear; 
    static int mMonth; 
    static int mDay; 
    static DateDialogFragmentListener mListener; 

    public static DateDialogFragment newInstance(Context context, DateDialogFragmentListener listener, Calendar now) { 
     DateDialogFragment dialog = new DateDialogFragment(); 
     mContext = context; 
     mListener = listener; 
     mYear = now.get(Calendar.YEAR); 
     mMonth = now.get(Calendar.MONTH); 
     mDay = now.get(Calendar.DAY_OF_MONTH); 
     return dialog; 
    } 


    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return new DatePickerDialog(mContext, mDateSetListener, mYear, mMonth, mDay); 
    } 


    private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
       int dayOfMonth) { 
      mYear = year; 
      mMonth = monthOfYear; 
      mDay = dayOfMonth; 

      mListener.updateChangedDate(year, monthOfYear, dayOfMonth); 
     } 
    }; 
} 

而就如果你想在這裏是佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/fabricc" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".SunriseSunset" > 

    <LinearLayout 
     android:id="@+id/LinearLayout02" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:padding="10dp" 
      android:text="Date:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

      <Button 
     android:id="@+id/date_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="03-18-2012" 
     android:onClick="clickMe"/> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/LinearLayout04" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:padding="10dp" 
      android:text="Location:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <Spinner 
      android:id="@+id/Locationspinner" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:entries="@array/location_array" 
      android:padding="10dp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/LinearLayout343" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:weightSum="4" > 

     <TextView 
      android:id="@+id/textView23" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="2" 
      android:padding="10dp" 
      android:text="Coordinates:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/LatCoord" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:padding="10dp" /> 

     <TextView 
      android:id="@+id/LongCoord" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:padding="10dp" /> 
    </LinearLayout> 

    <Button 
     android:id="@+id/CalculateSunriseSunset" 
     style="@style/sub_menu" 
     android:background="@drawable/blue_menu_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:padding="5dp" 
     android:text="Calculate Sunrise/Sunset Time" /> 

    <LinearLayout 
     android:id="@+id/LinearLayoutasdsd" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView122" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:padding="10dp" 
      android:text="Sunrise:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/Sunrise" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="00:00:00" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/LinearLayoutasdsad" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView133" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:padding="10dp" 
      android:text="Sunset:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/Sunset" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="00:00:00" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 
    </LinearLayout> 

</LinearLayout> 

就像我說的任何幫助,將大規模讚賞=)

感謝您的期待。

+0

你卡在了什麼?請具體說明。 – Tushar

+0

所有這一切......我不知道如何從DatePicker獲取變量到web服務的url中。 – Athoul

+0

@Athoul哇,你的項目越來越大。 – pt2121

回答

2

我不知道你的要求,但我想你可以嘗試從

String formattedDate = df.format(c.getTime()); 

更改爲

String formattedDate = df.format(now.getTime()); 

這是非常髒,但我認爲它應該工作得很好。 你doInBackground應該是這樣的:

@Override 
    protected String doInBackground(Void... params) { 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 

     // Finds todays date and adds that into the URL 
     //Calendar c = Calendar.getInstance(); 
     //System.out.println("Current time => " + c.getTime()); 
     SimpleDateFormat df = new SimpleDateFormat("dd/MM"); 
     String formattedDate = df.format(now.getTime()); 

     String finalURL = "http://www.earthtools.org/sun/" 
       + LatCoord.getText().toString().trim() + "/" 
       + LongCoord.getText().toString().trim() + "/" 
       + formattedDate + "/99/0"; 
     HttpGet httpGet = new HttpGet(finalURL); 
     String text = null; 

     try { 
      HttpResponse response = httpClient.execute(httpGet, 
        localContext); 
      HttpEntity entity = response.getEntity(); 
      text = getASCIIContentFromEntity(entity); 
     } catch (Exception e) { 
      return e.getLocalizedMessage(); 
     } 
     return text; 
    } 

希望這有助於。