2016-08-09 169 views
0

Ich bin sehr neu in Android Studio und ich baue eine einfache Countdown-Timer-App. Ich habe 2 Aktivitäten. Bei der ersten Aktivität (Login) wählt der Benutzer ein Datum über die Datumsauswahl, die zweite Aktivität (Profil) zeigt einen Countdown-Timer. Der Countdown-Timer funktioniert perfekt, wenn ich ein Datum dafür in der Java-Klasse festlege, aber ich habe Probleme beim Abrufen des Datums aus der Login-Aktivität. Mein Code für beide Aktivitäten ist unten.Wie bekomme ich Datum von Datepicker zu einer anderen Aktivität in Android

Ich weiß, ich muss das Datum ändern futureDate = dateFormat.parse ("2016-8-10"); aber ich bin mir nicht sicher wie.

LOGIN.CLASS

public class Login extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, OnClickListener { 
//private SharedPreferences sp; 

EditText enterusername; 
Button continuetoprofile; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    /*sp = getSharedPreferences("myPreference" , Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sp.edit(); 
    editor.putString("myKey" , "I am data to store"); 
    editor.commit(); 

    Writing data to SharedPreferences*/ 

    enterusername = (EditText) findViewById(R.id.enterusername); 
    continuetoprofile=(Button) findViewById(R.id.continuetoprofile); 
    continuetoprofile.setOnClickListener(this); 
} 

//SHARED PREFERENCES 
/*public void saveInfo(View view){ 
    SharedPreferences save = getSharedPreferences("name", Context.MODE_PRIVATE); 

    SharedPreferences.Editor editor = save.edit(); 
    editor.putString("username",enterusername.getText().toString()); 
    editor.apply(); 
}*/ 



public void onClick (View v){ 
    Intent intent = new Intent(this,Profile.class); 
    intent.putExtra("username", enterusername.getText().toString()); 
    startActivity(intent); 
} 
public void datePicker(View view){ 

    DatePickerFragment fragment = new DatePickerFragment(); 
    fragment.show(getSupportFragmentManager(), "date"); 
} 
private void setDate(final Calendar calendar) { 
    final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM); 
    ((TextView) findViewById(R.id.showDate)).setText(dateFormat.format(calendar.getTime())); 
} 

public void onDateSet(DatePicker view, int year, int month, int day) { 
    Calendar cal = new GregorianCalendar(year, month, day); 
    setDate(cal); 
} 
public static class DatePickerFragment extends DialogFragment { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 
     return new DatePickerDialog(getActivity(), 
       (DatePickerDialog.OnDateSetListener) 
         getActivity(), year, month, day); 
    } 

} 
Intent intent = getIntent(); 
public void privPol(View view){ 
    Intent intent = new Intent(this, PrivacyPolicy.class); 
    startActivity(intent); 
} 
public void TOU(View view){ 
    Intent intent = new Intent(this, TermsOfUse.class); 
    startActivity(intent); 
} 
public void toProfile(View view){ 
    Intent intent = new Intent(this, Profile.class); 
    startActivity(intent); 

} 

PROFILE.CLASS

public class Profile extends AppCompatActivity { 
//private SharedPreferences spref; 
//TextView nameofuser; 

TextView nameofuser; 
private TextView daystxt, hourstxt, minutestxt, secondstxt; 
private Handler handler; 
private Runnable runnable; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_profile); 

    initUI(); 
    countDownStart(); 

    nameofuser = (TextView)findViewById(R.id.nameofuser); 
    Intent intent = getIntent(); 
    String username = intent.getStringExtra("username"); 
    nameofuser.setText("Welcome, " + username); 

} 

@SuppressLint("SimpleDateFormat") 
private void initUI() { 
    daystxt = (TextView) findViewById(R.id.days); 
    hourstxt = (TextView) findViewById(R.id.hours); 
    minutestxt = (TextView) findViewById(R.id.minutes); 
    secondstxt = (TextView) findViewById(R.id.seconds); 
} 
public void countDownStart() { 
    handler = new Handler(); 
    runnable = new Runnable() { 
     @Override 
     public void run() { 
      handler.postDelayed(this, 1000); 
      try { 
       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

       // Here Set your Event Date 
       Date futureDate = dateFormat.("2016-8-10"); 
       Date currentDate = new Date(); 
       if (!currentDate.after(futureDate)) { 
        long diff = futureDate.getTime() 
          - currentDate.getTime(); 
        long days = diff/(24 * 60 * 60 * 1000); 
        diff -= days * (24 * 60 * 60 * 1000); 
        long hours = diff/(60 * 60 * 1000); 
        diff -= hours * (60 * 60 * 1000); 
        long minutes = diff/(60 * 1000); 
        diff -= minutes * (60 * 1000); 
        long seconds = diff/1000; 
        daystxt.setText("" + String.format("%02d", days)); 
        hourstxt.setText("" + String.format("%02d", hours)); 
        minutestxt.setText("" + String.format("%02d", minutes)); 
        secondstxt.setText("" + String.format("%02d", seconds)); 
       } else { 
        handler.removeCallbacks(runnable); 
        // handler.removeMessages(0); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    handler.postDelayed(runnable, 0); 
} 

Intent intent = getIntent(); 
public void toMenu(View view) { 
    Intent intent = new Intent(this, Menu.class); 
    startActivity(intent); 
} 
public void tostartdate(View view) { 
    Intent intent = new Intent(this, EditStartdate.class); 
    startActivity(intent); 
} 
+0

Was haben Sie das Problem versuchen getan, um herauszufinden? Haben Sie versucht, den Code durchzugehen, um zu sehen, welcher Wert zurückgegeben wird? Erhalten Sie Ausnahmen? –

+0

@ DavidT.Macknet Ich habe versucht, Absicht auf die gleiche Weise wie ich verwendet, um den String-Namen abrufen, aber das hat nicht funktioniert. – sharms

Antwort

0

Versuchen die putExtras() Methode verwendet es durch die Absicht in ein Bündel zu übergeben.

Der folgende Code helfen wird:

Bundle Daten durch

Senden
Intent i = new Intent(this, ActivityTwo.class); 

Bundle bundle = new Bundle(); 
bundle.putExtras("Date",YOUR_DATE); 

i.putExtras(bundle); 

startActivity(i); 

Abrufen von Daten in neue Aktivität

Bundle bundle = getIntent().getExtras(); 

String date = bundle.getString(“Date”); 

Diese

1
helfen

und

//Create a bundle to pass the date and send your date as Long 
      Bundle currentDate = new Bundle(); 
      currentDate.putLong("setDate", buttonDate.getTime()); 

und

//Read the passed bundle from the next activity get Long and convert it to Date 
Bundle setDate = this.getArguments(); 
Long currDate = setDate.getLong("setDate"); 

Hinweis: Der Date-Konstruktor die Zeit so lange in Millisekunden akzeptiert, nicht Sekunden. Sie müssen es mit 1000 multiplizieren und sicherstellen, dass Sie es so lange liefern.

Umwandlung

Date d = new Date(1220227200L * 1000); 
+0

würde ich das alles in meine zweite Aktivität stecken? Wie würde ich das Datum meiner Login-Aktivität abrufen? – sharms

+0

erhalten Sie Datum und Vorbereitung Bundle und senden Sie es von Ihrer ersten Aktivität und holen Sie das Bündel aus der zweiten Aktivität und konvertieren Sie es wieder in einen Datumstyp wieder –