Onclick, POST/GET

Diskussion i 'Frågor, support och diskussion' startad av moiam, 29 dec 2011.

  1. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej igen!

    Nu har jag jobbat mig runt TinyWebDB tack ock lov.

    Istället ska jag göra så att den applikationen jag gör ska skicka data till en PHP sida via URL.

    Alltså jag plockar upp information från 5 fält.

    "Kundnummer (TextField)"
    "Anställd (TextField)"
    "Timmar (TextField)"
    "Rot (CheckBox)"
    "InforArbete (TextField)"

    Det jag då vill ska hända är att när jag trycker på knappen "Skicka"
    så ska alla fälten länkas ihop till en URL som jag kan köra GET på sedan:

    http://www.url.se/registrera.php?kundnummer="Kundnummer (TextField)"?anstalld="Anställd (TextField)"?timmar="Timmar (TextField)"?rot="Rot (CheckBox)"?info="InforArbete (TextField)"

    Mitt enda problem är att jag inte vet hur jag får till detta i Eclipse.
    I App Inventor var detta skit enkelt, men e Eclipse står jag still.

    Finns det någon som kan peka mig åt rätt håll.
    Jag tycker det är väldigt snålt med information om det jag vill åt på Google.
    Eller så är det jag som inte vet jag jag ska söka på.

    Java är inte riktigt min starka sida :P
     
  2. Buzz

    Buzz Android Apprentice Medlem

    Blev medlem:
    14 maj 2010
    Inlägg:
    4 920
    Mottagna gillanden:
    2 219

    MINA ENHETER

  3. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Detta är jag van vid och jag har implementerat det i majoriteten av de applikationer jag har utvecklat, bland annat Madeli Design-appen.

    Jag har skrivit svar på detta på StackOverflow, vilket länkas nedan (alla svar lär inte vara exakt relevanta mot exakt GET, men i alla fall):

    java - How to access a web content (POST/GET) in an Android application? - Stack Overflow
    php - Sending POST and FILE data from Java - Stack Overflow
    Android HTTP login questions - Stack Overflow

    För att få ihop hela URL:en korrekt så behöver du endast modifiera om din URL-sträng. Detta bör inte vara något problem, annars får du återkomma så ska jag försöka hjälpa dig.
     
    Last edited: 29 dec 2011
    moiam gillar detta.
  4. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    Grymt bra länkar! Tack!

    Ja det som jag har mest problem med är hur man samlar upp alla inmatningsfälten så jag kan använda mig utav deras värden för att skapa en url som applikationen öppnar i webläsaren.

    Just det där med att plocka värdena från inmatningsfälten saknar jag.

    Egentligen så är väll koden ganska simpel.

    Tryck på knappen -> Plocka värdena -> Skriv ut den i en URL -> Öppna URLen i webbläsaren.

    Det känns som jag borde plugga mer Java. Var typ några år sedan jag pluggade det, men det känns inte riktigt som det var då.
    Uppskattar verkligen den hjälp jag får.

    MVH
     
    Last edited: 30 dec 2011
  5. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    För att du ska få ut en strängvariabel ur dina inmatningsfält så får du kalla på en utav EditText:s metoder, se exemplet nedan:

    Kod:
    
    minEditText = (EditText) findViewById(R.id.myawesomeinput);
    
    String minLillaText = minEditText.getText().toString();
    
    String minFramtidaURL = "http://www.minurl.se/reg.php?mittLillaGETfalt=" + minLillaText + "&fyllPaMerFalt=" + ...........;
    
    
    Efter det är det bara att fylla på. :)
     
    Last edited: 30 dec 2011
    moiam gillar detta.
  6. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    Många tack!

    Så här menade du då typ :)



    Kod:
    package com.muo.xxxx;
    
    import android.app.Activity; 
    import android.content.Intent;
    import.android.net.Uri;
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.EditText; 
    
    
    public class xxxx extends Activity {
    	
    	private Button button;
    	private EditText kundnummer;
    	private EditText timmar;
    	private EditText anstalld;
    	private EditText info;
    	
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        
            
        button = (Button) this.findViewById(R.id.Skicka);
        
        kundnummer = (EditText) findViewById(R.id.kundnummer);
        timmar = (EditText) findViewById(R.id.timmar);
        anstalld = (EditText) findViewById(R.id.anstalld);
        info = (EditText) findViewById(R.id.info);
    
        String kundnummer2 = kundnummer.getText().toString();
        String timmar2 = timmar.getText().toString();
        String anstalld2 = anstalld.getText().toString();
        String info2 = info.getText().toString();
    
        final String sendURL = "http://www.xxxx.se/xxxx.php?kund=" + kundnummer2 + "&timmar=" + timmar2 + "&anstalld=" + anstalld2 + "arbete=" + info2;  
       
    
        
        }
        
    }
    Nu har jag ju dock det där problemet med knappen.
    Som jag förstår så är det OnClickListener som krävs.

    Den vill jag ju då att den ska skicka "sendURL" så att den öppnas i telefonens webbläsare. Hur gör man det? Det jag har lyckats få fram är:

    Kod:
        final String sendURL = "http://www.xxxx.se/xxxx.php?kund=" + kundnummer2 + "&timmar=" + timmar2 + "&anstalld=" + anstalld2 + "arbete=" + info2;  
       
        button.setOnClickListener(new OnClickListener() {
       
    		public void onClick(View v) {
    	    	Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(sendURL)); 
    	    	startActivity = (browserIntent);
    		}	
    		});
    Problemet är för det första att den klagar på att sendURL aldrig används (på första raden i koden ovan). (Dock så är det ju inget error)
    Och det andra är att han säger att startActivity "cannot be resolved to a variable".

    Vad beror detta på?

    Tack för all hjälp!!
     
  7. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Eftersom du är inne i ett interface så måste du (för att kunna använda startActivity()) dra en referens mot hela din aktivitet. Det andra felet är att du sätter startActivity() = envariabel, när det egentligen är startActivity(envariabel), för att få den att köras.

    Exempelvis, testa detta i OnClickListenern:

    Kod:
    DinAktivitetsKlassNamn.this.startActivity(browserIntent);
    
     
    moiam gillar detta.
  8. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    Tack! Det fungerade strålande med knappen!

    Nu är det bara ett problem som jag märkte nu när jag provade att skicka.

    När jag trycker på knappen så skickar den mig till webbläsaren, men adressen som den ger mig i webbläsaren från appen är:

    Kod:
    http://www.xxxx.se/xxxx.php?kund=&timmar=&anstalld=arbete=;
    den skriver inte ut variablerna från fälten :/

    Varför då? Allt verkar ju stämma i min hjärna i alla fall.

    Inga errors heller.

    Kod:
    package com.muo.helloworld;
    
    import android.app.Activity; 
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.EditText; 
    
    
    public class HelloWorld extends Activity {
    	
    	private Button button;
    	private EditText kundnummer;
    	private EditText timmar;
    	private EditText anstalld;
    	private EditText info;
    	
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        
            
        button = (Button) this.findViewById(R.id.Skicka);
        
        kundnummer = (EditText) findViewById(R.id.kundnummer);
        timmar = (EditText) findViewById(R.id.timmar);
        anstalld = (EditText) findViewById(R.id.anstalld);
        info = (EditText) findViewById(R.id.info);
    
        String kundnummer2 = kundnummer.getText().toString();
        String timmar2 = timmar.getText().toString();
        String anstalld2 = anstalld.getText().toString();
        String info2 = info.getText().toString();
    
        final String sendURL = "http://www.moiam.se/LBIRS.php?kund=" + kundnummer2 + "&timmar=" + timmar2 + "&anstalld=" + anstalld2 + "arbete=" + info2;  
       
        button.setOnClickListener(new OnClickListener() {
       
    		public void onClick(View v) {
    	    	Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(sendURL)); 
    	    	HelloWorld.this.startActivity(browserIntent);
    		}	
    		});
        }
        
    }
    
    
     
    Last edited: 30 dec 2011
  9. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Har du någon text i EditText-boxarna? Annars vore det konstigt, men du kan testa logga sendURL för att se att den innehåller allt den ska.
     
  10. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    Om du menar att jag skriver i textboxarna så ja där finns det text i.
    Med risk för att låta väldigt dum, men hur loggar man något? :)
     
  11. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag provade runt lite och provade att hoppa över delen getText toString och gjorde om då så att den tog vad den fick direkt från TextEdit fälten och då fick jag iallafall något. Typ i stil med "android.widget.EditText@43b90e80" tex. Vet inte om det hjälper något, men kanske :)
     
  12. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Testa köra:

    Kod:
    Log.d("sendURL", "sendURL: " + sendURL);
    
    För att den ska logga i LogCat så behöver du aktivera debuggern, vilket du gör i application-delen av manifestet, och där skriver du android:debuggable="true".
     
  13. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    LogCat ger mig detta tillbaka:

    Kod:
    D 12-30 12:28:50.976: D/sendURL(785): sendURL: http://www.moiam.se/LBIRS.php?kund=&timmar=&anstalld=arbete=
     
  14. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Ja, men vad dum jag är! Får skylla på att jag är avdankad. :teeth:

    Placera allt som har med getText() att göra inuti OnClickListenern. Som det är nu hämtar du texten från boxarna när applikationen startar, och då är det klart att den är tom.
     
    moiam gillar detta.
  15. moiam

    moiam Baby Droid Medlem

    Blev medlem:
    29 dec 2010
    Inlägg:
    24
    Mottagna gillanden:
    0

    MINA ENHETER

    Du är helgrymm!

    Tusen hjärtligt tack :)

    Funkar som en klocka :D
     
  16. Pajn

    Pajn Adult Droid Medlem

    Blev medlem:
    12 aug 2009
    Inlägg:
    606
    Mottagna gillanden:
    51

    MINA ENHETER

    Glöm inte att säkra variablerna så att de inte pajjar adressen (om man tex. skriver / i nån av textfälten blir det lite dumt).

    Detta gör du ganska enkelt med:
    Kod:
    URLEncoder.encode("osäkrad sträng")