Child pages
  • Email űrlap adatbázis nélkül
Skip to end of metadata
Go to start of metadata

Sziasztok!

Jelenleg egy olyan alkalmazással küzdök, amivel egy fogorvoshoz lehet bejelentkezni androidos telefonon. A kérés az volt, hogy a bejelentkezési űrlapot négy külön oldalra bontsuk le. Az első oldalon bekérem a páciens adatait: név, telefon, email cím. A második oldalon az időpont szerepel, a harmadik oldalon pedig a kezelést választja ki. A negyedik oldalról szeretném elküldeni az emailt, ott még szerepel egy beviteli mező, amiben megjegyzéseket írhat az orvosnak. A kérdésem az lenne, hogy az értékeket hogyan tudom átvinni az utolsó oldalra, SQLite használata nélkül.

      
      
Page viewed times
  • No labels

24 Comments

  1. Szerintem egy közönséges Singleton DTO osztály megfelelő erre a feladatra, az Activity onPause metódusában elmented, az onResume metódusban visszatöltöd, a végén törlöd a tartalmát, ha elküldted. Ez nem véd az ellen, amikor a program futása közben bejön egy telefonhívás, és a platform kilövi a programot, de ez a jelenlegi hardverek esetén már ritka dolog.

    1. Egy kicsit kínai amit írsz, de nagyjából értem. Jelenleg így néz ki az Info.java fájl:

      EditText name, phone, email;

          ImageButton next;

          String request_name, request_phone, request_email;

          

          @Override

          protected void onCreate(Bundle savedInstanceState) {

              // TODO Auto-generated method stub

              super.onCreate(savedInstanceState);

              setContentView(R.layout.info);

              

              name = (EditText) findViewById(R.id.NameText);

              phone = (EditText) findViewById(R.id.PhoneText);

              email = (EditText) findViewById(R.id.EmailText);

              

              

                                  

              next = (ImageButton) findViewById(R.id.NextButtonInfo);

              next.setOnClickListener(new OnClickListener() {

              

              public void onClick(View v) {

                  // TODO Auto-generated method stub

                  

                  Intent intent = new Intent(Info.this, Date.class);

                  intent.putExtra("request_name", name.getText().toString());

                  intent.putExtra("request_phone", phone.getText().toString());

                  intent.putExtra("request_email", email.getText().toString());

                  

                  startActivity(intent);

      Hova teszem az onPause-t?

      Előre is köszi a segítséget!

      1. Az onPause és az onResume egy szinten van az onCreate metódussal, szóval simán mellé kell csak tenni, lásd a 2. Az alkalmazások szerkezete cikkben az Activity életciklust. A lényeg az, hogy csinálsz egy sima Singleton osztályt, abba beleteszed a nevet, telefonszámot és email címet tartalmazó mezőt (hozzá getter-setter metódusokat), majd az onPause részben egy ilyesmit csinálst:

          @Override
          public void onPause()
          {
            super.onPause();
        
            DTOClass dto = DTOClass.getInstance();
            dto.setName(name.getText());
            dto.setPhone(phone.getText());
            dto.setEmail(email.getText());
          }

        Illetve az onResume ugyanezt teszi, csak fordítva:

          @Override
          public void onResume()
          {
            super.onResume();
        
            DTOClass dto = DTOClass.getInstance();
            name.setText(dto.getName());
            phone.setText(dto.getPhone());
            email.setText(dto.getEmail());
          }

        Nagyjából ennyi... (smile)

        1. Valahogy nem látom át a dolgot! Erre jutottam, de a mezők kitöltése után hibával leáll!

          import android.app.Activity;
          import android.content.Intent;
          import android.os.Bundle;
          import android.view.View;
          import android.view.View.OnClickListener;
          import android.widget.EditText;
          import android.widget.ImageButton;

           

          public class Info extends Activity {

          EditText name, phone, email;
          ImageButton next;

          @Override
          protected void onPause() {
          // TODO Auto-generated method stub
          super.onPause();

          name = (EditText) findViewById(R.id.NameText);
          phone = (EditText) findViewById(R.id.PhoneText);
          email = (EditText) findViewById(R.id.EmailText);


          DTOClass dto = DTOClass.getInstance();
          dto.setName(name.getText());
          dto.setPhone(phone.getText());
          dto.setEmail(email.getText());

          }

          @Override
          protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);

          ImageButton next = (ImageButton) findViewById(R.id.NextButtonInfo);
          next.setOnClickListener(new OnClickListener() {

          public void onClick(View v) {
          // TODO Auto-generated method stub
          Intent intent = new Intent(Info.this, Date.class);
          startActivity(intent);

          }
          });
          }

          }

           

          1. DTOClass osztályt létrehoztad a mentendő mezőkkel? (smile)

             

            1. Úgy érzem létrehoztam, de erős a gyanúm, hogy valami hiányzik belőle! (smile)

              public static DTOClass getInstance() {
              // TODO Auto-generated method stub
              return null;
              }

              public Object getName;
              public Object getEmail;
              public Object getPhone;

              public void setName(Editable text) {
              // TODO Auto-generated method stub

              }

              public void setPhone(Editable text) {
              // TODO Auto-generated method stub

              }

              public void setEmail(Editable text) {
              // TODO Auto-generated method stub

              }

              public CharSequence getName() {
              // TODO Auto-generated method stub
              return null;
              }

              public CharSequence getPhone() {
              // TODO Auto-generated method stub
              return null;
              }

              public CharSequence getEmail() {
              // TODO Auto-generated method stub
              return null;
              }

              1. Na, ez így nagyon nem jó... (smile)

                Egyrészt nem Object, hanem String kellene típusnak, másrészt a return null, illetve az üres metódus törzsek okoznak bajt, ilyesmit kellene beleírni:

                public class DTOClass
                {
                  private DTOClass INSTANCE = new DTOClass();
                  private String email;
                
                  private DTOClass()
                  {
                  }
                
                  public DTOClass getInstance()
                  {
                    return INSTANCE;
                  }
                
                  public String getEmail()
                  {
                    return email;
                  }
                
                  public void setEmail(String email)
                  {
                    this.email = email;
                  }
                }

                Hasznos lenne némi alap Java tudást magadhoz venned, mert csak kudarcok fognak érni, az Android közepesen erős Java tudást igényel, hasznos ismerni a GC-t, az objektumok életciklusát, szálak működését és kezelését, mert egy akkuzabáló és lassú alkalmazásod lesz, amit nem fognak szeretni a felhasználók.

                1. Köszi szépen a segítséget! Folyamatosan tanulgatom a javat, de aztmondták, ez sűrgős, ezt kell csinálni! 

                  1. Hajrá... (smile)

                    Ha elakadsz, segítünk.

                    1. Anonymous

                      Nahát régen jártam erre. Köszi a segítséget, sikerült megoldani, de most elakadtam az e-mail küldésnél! Szóval az a helyzet, hogy amikor az utolsó oldara behívom az előző oldalakon megadott értékeket, valamiért e-mailben nem jelenik meg. A kérdésem az lenne, hogy több Intent.EXTRA_TEXT-et használhatok, vagy össze kell kapcsolnom a stringeket. Az utolsó oldaon van egy beviteli mező, azt megjeleníti az emailben, a többit nem. TextView-ot használva megjeleníti az eddig bevitt adatokat, csak az email üzenetében nem.

                      A mail kód így néz ki:

                      String message = et.getText().toString(); - Az et a beviteli mező

                      Intent email =  new Intent (Intent.ACTION_SEND);
                      email.putExtra(Intent.EXTRA_EMAIL,/emailcím/);
                      email.putExtra(Intent.EXTRA_SUBJECT, "Tárgy");
                      email.putExtra(Intent.EXTRA_TEXT, message);

                      email.setType("message/rcf822");

                      Ha mégegy beviteli mezőt szeretnék hozzátenni, akkor mit is kell csinálnom? (smile)

                      Előre is köszi!

                      1. Össze kell fűzni egy message-be... (smile)

                        StringBuilder sb = new StringBuilder();
                        sb.append(et.getText()).append('\n');
                        sb.append(másik.getText()).append('\n');
                        sb.append(...
                        String message = sb.toString();
                        1. Ismét köszi! Majd valahogy meghálálom ám. (smile)

                        2. Szia! Még mindig tele vagyok kérdésekkel. A DTO Class-t hogyan hozom létre Eclipseben? New Java Class-nél a Modifiers menüben és a Superclass menüben mit kell választanom?

                          Köszi.

                          1. Szerintem semmit nem kell kiválasztanod, alapértelmezetten jó osztályt kellene létrehoznia az Eclipse-nek, de nem értek hozzá, nagyon ritkán használom... (smile)

                            1. Nos, létrehoztam a DTO Class-t, végre eljutottam odáig, hogy nem ír ki semmi hibát, nem huzogat pirossal alá mindent. A java file most így néz ki.

                              package com.turiistvan.sharedapp;

                              import android.app.Activity;
                              import android.os.Bundle;
                              import android.text.Editable;
                              import android.view.View.OnClickListener;
                              import android.widget.EditText;

                              public class Home extends Activity {
                              private EditText username;
                              private EditText password;
                              private EditText age;

                              @Override
                              protected void onCreate(Bundle savedInstanceState) {
                              // TODO Auto-generated method stub
                              super.onCreate(savedInstanceState);
                              setContentView(R.layout.main);

                              setUsername((EditText) findViewById(R.id.usernameEditText1));
                              setPassword((EditText) findViewById(R.id.PasswordeditText2));
                              setAge((EditText) findViewById(R.id.AgeeditText3));

                              }

                              /**
                              * @return the username
                              */
                              public EditText getUsername() {
                              return username;
                              }

                              /**
                              * @param username the username to set
                              */
                              public void setUsername(EditText username) {
                              this.username = username;
                              }

                              /**
                              * @return the password
                              */
                              public EditText getPassword() {
                              return password;
                              }

                              /**
                              * @param password the password to set
                              */
                              public void setPassword(EditText password) {
                              this.password = password;
                              }

                              /**
                              * @return the age
                              */
                              public EditText getAge() {
                              return age;
                              }

                              /**
                              * @param age the age to set
                              */
                              public void setAge(EditText age) {
                              this.age = age;
                              }
                              @Override
                              protected void onPause() {
                              // TODO Auto-generated method stub
                              super.onPause();
                              DTOClass dto = DTOClass.getInstance();
                              dto.setUsername(getText());
                              dto.setpassword(getText());
                              dto.setage(getText());
                              }

                              private Editable getText() {
                              // TODO Auto-generated method stub
                              return null;
                              }

                              }

                              Most kellene beletennem a gomb akciót, de az onCreate metódus már nem megy, vagyis az eclipse nem ajánlja fel. Innentől, hogy határozom meg a gombot, hogy lépjen a következő oldalra?

                               

                              1. Bocsánat, hogy csak most reagálok, el voltam foglalva a szerver költöztetésével.

                                Ránézésre jól néz ki... nem tudom mi lehet a baja, fordításnál nem ír hibát?

                                1. Sikerült megoldanom a problémát, nem tudom, hogy hogyan, most a gomb nem reagál, nem ugrik a következő oldalra!

                                  package com.turiistvan.sharedapp;

                                   

                                  import android.app.Activity;

                                  import android.content.Intent;

                                  import android.os.Bundle;

                                  import android.text.Editable;

                                  import android.view.View;

                                  import android.view.View.OnClickListener;

                                  import android.widget.Button;

                                  import android.widget.EditText;

                                   

                                  public class Home extends Activity {

                                          private EditText username;

                                          private EditText password;

                                          private EditText age;

                                   

                                          @Override

                                          protected void onCreate(Bundle savedInstanceState) {

                                              // TODO Auto-generated method stub

                                              super.onCreate(savedInstanceState);

                                              setContentView(R.layout.main);

                                              

                                              setUsername((EditText) findViewById(R.id.usernameEditText1));

                                              setPassword((EditText) findViewById(R.id.PasswordeditText2));

                                              setAge((EditText) findViewById(R.id.AgeeditText3));

                                              

                                              }

                                   

                                          /**

                                           * @return the username

                                           */

                                          public EditText getUsername() {

                                              return username;

                                          }

                                   

                                          /**

                                           * @param username the username to set

                                           */

                                          public void setUsername(EditText username) {

                                              this.username = username;

                                          }

                                   

                                          /**

                                           * @return the password

                                           */

                                          public EditText getPassword() {

                                              return password;

                                          }

                                   

                                          /**

                                           * @param password the password to set

                                           */

                                          public void setPassword(EditText password) {

                                              this.password = password;

                                          }

                                   

                                          /**

                                           * @return the age

                                           */

                                          public EditText getAge() {

                                              return age;

                                          }

                                   

                                          /**

                                           * @param age the age to set

                                           */

                                          public void setAge(EditText age) {

                                              this.age = age;

                                          }

                                          @Override

                                          protected void onPause() {

                                          // TODO Auto-generated method stub

                                          super.onPause();

                                          DTOClass dto = DTOClass.getInstance();

                                          dto.setUsername(getText());

                                          dto.setpassword(getText());

                                          dto.setage(getText());

                                          }

                                   

                                          private Editable getText() {

                                              // TODO Auto-generated method stub

                                              return null;

                                          

                                          }

                                          

                                          protected void onResume() {

                                              setContentView(R.layout.sec);

                                          

                                          Button b = (Button) findViewById(R.id.button1);

                                          b.setOnClickListener(new OnClickListener() {

                                              

                                              @Override

                                              public void onClick(View v) {

                                                  // TODO Auto-generated method stub

                                                  startActivity(new Intent(Home.this, Sec.class));

                                              }

                                          });

                                          

                                          }

                                  }

                                   

                                  1. Az alábbi szekcióban próbálj meg logot írni:

                                            b.setOnClickListener(new OnClickListener() {
                                                
                                                @Override
                                                public void onClick(View v) {
                                                    Log.i("Home", "onClick startActivity");
                                                    startActivity(new Intent(Home.this, Sec.class));
                                                }
                                            });

                                    Majd nézd meg a logban, hogy kiírta-e a logba (logcat) a gombra kattintáskor. Egyébként a super.onResume() nincs meghívva, lehet, hogy ez a baj.

                                     

  2. Köszi.

    Van még egy kérdésem.

    Ha az xml-ben elhelyezek egy datepickert, akkor annak az értékét, amit a felhasználó beállít, hogyan jelenítem meg a másik oldalon egy TextView-ben?

    1. Lekérdezed belőle, lásd a 5. Választómezők cikk vége felé a példát. (smile)

  3. Igen, átolvastam, de kicsit bonyolultnak tűnik. Találtam egy ilyen megoldást:

    final DatePicker dp = (DatePicker) findViewById(R.id.DateRequest);

            dp.setOnClickListener(new OnClickListener() {

                

                public void onClick(View v) {

                    // TODO Auto-generated method stub

                    mYear = dp.getYear();

                    mMonth = dp.getMonth();

                    mDay = dp.getDayOfMonth();

                    

                    dp.setText(new StringBuilder()

                    .append(mMonth + 1).append("-")

                    .append(mDay).append("-")

                    .append(mYear).append(" "));

                            

                    }

            });

    A gond azt vele, hogy a kiemelt részben a setText-re hibár ír.

    Ennyi nem elég a lekérdezéshez?

    1. A DatePicker-nek nincs szerintem setText metódusa, szöveget nem tudsz beletenni.

      1. Elég csak ezt beletenni, vagy az egész kód kell?

         

        public void onDateSet(DatePicker view, int year, int month, int day)

          {
            TextView textView = (TextView) findViewById(R.main.pickedDate);
            textView.setText(year + "-" + (month + 1) + "-" + day);
          }
        Vagy a setText helyére mit kell tennem?
        1. Ez így működni látszik, ha arra van szükséged, hogy egy textView mutassa a kiválasztott dátumot. Esetleg lehet még cizellálni azzal, hogy legyenek bevezető nullák is.