1. Mobilabonnemang: Välj kampanj som passar dig bäst! 4 månader till halva priset eller 2 månader till halva priset och 50 GB (giltigt i 12 månader). Ingen bindningstid & fria samtal ingår i alla abonnemang.
    Stäng notis
  2. Stäng notis
  3. Unpacked-nyheter: Fold 4 | Flip 4 | Watch 5 | Buds Pro 2
    Stäng notis
  4. Registrera ett konto och bli del av Sveriges förmodligen trevligaste och mest hjälpsamma community.
    Stäng notis
  5. Stäng notis
  6. Stäng notis
  7. Stäng notis
  8. Stäng notis
  9. Stäng notis

[problem] Med att hämta string ifrån en annan activity.

Diskussion i 'Frågor, support och diskussion' startad av LGLinus, 15 jun 2011.

  1. LGLinus

    LGLinus Baby Droid Medlem

    Blev medlem:
    6 jun 2011
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    Hejsan, håller på med en liten application, men har stött in i ett problem. Saken är den att jag ska hämta något som har skrivits i en annan activity. Jag kommer visa här en del utav appen.

    Detta är i Excersises1.java filen.

    public class Excersises1 extends Activity{

    public static Editable Answer1
    EditText etAnt;
    Button bnAnimalsfinish;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.excersises1);
    etAnt= (EditText)findViewById(R.id.etExcersiseant);

    bnAnimalsfinish.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View arg0) {
    Answer1 = etAnt.getText();
    startActivity(new Intent("com.LG.Secret,EXCERSISES1ANSWERS));
    }

    });
    }

    Så vad den gör är att när jag trycker på "finish" knappen ändra "Answer1" till vad texten är i etAnt.

    Detta är koden i den andra activityn, Excersises1answers.java :

    public class Excersises1answers extends Activity {



    TextView tvAnswer1;
    TextView tvAnswer2;
    String sAnswer1 = Excersises1.Answer1.toString();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.excersises1answers);
    tvAnswer1 = (TextView)findViewById(R.id.tvAnimalsanswer1);
    String sAnswer1 = Excersises1.Answer1.toString();
    if (sAnswer1=="xxx")
    {
    tvAnswer1.setTextColor(0xFF00FFFF);
    }
    else
    {
    tvAnswer1.setTextColor(0xFFFF0000);
    tvAnswer1.setText(sAnswer1);
    }
    }
    }

    Såvitt jag vet ska det inte vara något fel? Om jag skriver in "xxx" så blir ändå färgen röd, aldrig grön. La in så att den ändrar "tvAnswer1"s text till vad stringen är som jag hämtade ifrån activitien. Detta gjorde jag för att se om det verkligen blev ett annorlunda svar, vilket det inte blir.

    Kort sagt, även om jag skriver in "xxx" så kör den ändå "if " satsen. Det blir inte något felmeddelande eller något sånt

    edit : Oj, fan, detta passade nog bättre till frågor delen ^^
     
    Last edited: 15 jun 2011
  2. softarn

    softarn Teen Droid Medlem

    Blev medlem:
    4 mar 2010
    Inlägg:
    361
    Mottagna gillanden:
    9

    MINA ENHETER

    Sätt gärna koden inom några kod-taggar så blir det lite lättare att läsa
     
  3. Adam2

    Adam2 Adult Droid Medlem

    Blev medlem:
    26 jul 2010
    Inlägg:
    732
    Mottagna gillanden:
    55

    MINA ENHETER

    if(sAnswer1.equals("xxx"))...

    Sent from my Nexus S using Tapatalk
     
    LGLinus gillar detta.
  4. LGLinus

    LGLinus Baby Droid Medlem

    Blev medlem:
    6 jun 2011
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    Tackar!
     
  5. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    såhär gör man INTE.

    Du ska skicka strängen från den första activiteten in i den andra

    exempel :

    i activityn du skickar ifrån

    Kod:
    Intent newIntent = new Intent("com.LG.Secret",EXCERSISES1ANSWERS);
    
    newIntent.putExtra("com.LG.Secret.answer", Answer1);
    
    startActivity(newIntent);
    
    

    i activityn du hämtar upp ifrån

    Kod:
    Intent intent = this.getIntent();
    
    String theAnswer = (String) intent.getExtras().get("com.LG.Secret.answer");
    
    
     
  6. Adam2

    Adam2 Adult Droid Medlem

    Blev medlem:
    26 jul 2010
    Inlägg:
    732
    Mottagna gillanden:
    55

    MINA ENHETER

    Lite negativ ton tycker jag. :-P Visst finns det bättre sätt att göra det på och det är väl bra att du visar hur men förklara gärna varför också...

    Sent from my Nexus S using Tapatalk
     
  7. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    För att det är så Google tänkt att man ska göra med android, jag kan rekommendera "Professional android 2 development" av reto meier, där beskriver han hur man enkelt passerar värden från en activity till en annan.

    Statics skall man enbart använda i klasser som inte skall instanseras som objekt, t.ex utility-klasser där du bara utför en enkel operation på exv en sträng eller liknande.

    Om en annan tråd/klass skriver till ditt statiska värde så blir det per omgående förstört, det kan/behöver inte vara ett problem i detta fallet men kan bli om man programmerar trådat.

    Ur rent test-perspektiv kan det också bli ett "helsike" då activity2 får ett direkt beroende av Activity1, den är beroende av att activity1 finns och att dess värde är satt.

    Men låt oss säga att Activity2 kan få sitt värde från activity1b istället, kör man via .putExtra så blir det inget problem.

    exempelvis hur man kan skriva ett testcase för activity2 :

    http://stackoverflow.com/questions/...-when-my-activity-relies-on-extras-passed-thr

    Adam, jag ber om ursäkt om jag var otrevlig, men jag tycker man som utvecklare alltid ska försöka ompröva sig något och tänka om man gjort saker och ting rätt.
     
  8. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    828
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Undvik att använda static-fält som globala variabler. Det funkar oftast, men man vet inte alltid om värdet är satt till det man vill eftersom vem som helst (andra trådar) kan ändra värdet eller så har Android dödat aktiviteten vilket gör att värdet har försvunnit.
    Kopplingen mellan klasserna minskar också om du istället skickar in värdet istället för att hämtar det.
     
  9. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    Det var ju det jag sa + problemen som uppkommer med enhetstester :D