Avatar billede iziqio Nybegynder
08. december 2004 - 12:15 Der er 31 kommentarer og
3 løsninger

MIDlet problem.

Hvad er det forkert i min kode til at sende variabler via mobilen ?
Her er et udsnit af min php side der skal modtage variablerne var1 og var2.

De hedder det samme i min mobil program!

Hvordan får jeg sendt mine variabler fra mobil til hjemmesiden ?

Mangler jeg noget i min java kode ? Hvilken linie afsender de info jeg vælger?

----------------------
PHP kode på hjemmeside der modtager info.
----------------------

$var1 = $_REQUEST["var1"];
$var2 = $_REQUEST["var2"];

bla bla bla....


-----------------------
java kode i mobil
-----------------------

try{
                c = (HttpConnection)Connector.open(Url);
                c.setRequestMethod(HttpConnection.POST);

                os = c.openOutputStream();
                os.write(("VAR 1 ="+var1).getBytes());
                os.write(("VAR 2 ="+var2).getBytes());
                os.flush();
                len =c.getLength();
            }
Avatar billede _carsten Nybegynder
08. december 2004 - 12:31 #1
Havd med: os.write(("VAR1=var1&VAR2=var2).getBytes());
Avatar billede _carsten Nybegynder
08. december 2004 - 12:32 #2
Hov: os.write(("VAR1=var1&VAR2=var2").getBytes());
Avatar billede iziqio Nybegynder
08. december 2004 - 12:43 #3
virker ikke ! desværre... kan du ikke henvise til et eksempel på nettet hvor det står ?
Avatar billede _carsten Nybegynder
08. december 2004 - 12:49 #4
Nej, det var bare en idé.
Avatar billede brilleaben Nybegynder
08. december 2004 - 17:24 #5
Du skal huske at sætte content-length.
Avatar billede brilleaben Nybegynder
08. december 2004 - 17:30 #6
Ok, jeg var vist lidt kort for hovedet der :-)

Du kan enten strikke en get url sammen:

url="http://dinserver/sidemv.php?var1="+var1+"&var2="+var2

eller sende en post - der skal du huske at sætte content-length samt content-type.
Avatar billede iziqio Nybegynder
08. december 2004 - 18:29 #7
har du et kode eksempel ?
Avatar billede iziqio Nybegynder
08. december 2004 - 18:36 #8
jeg skal måske lige sige, at der oploader tomme felter til hjemmesiden!Så det virker ... næsten ... :-)
Avatar billede iziqio Nybegynder
08. december 2004 - 20:17 #9
Hvad er der galt med denne mulighed ?
(Er prøvet men virker ikke umiddelbart)

try{

c = (HttpConnection)Connector.open(Url);
c.setRequestMethod(HttpConnection.POST);
c.setRequestProperty("Content-Length", ""+ var1.length() );
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
c.setRequestProperty("Content-Language", "dk-DK");
c.setRequestProperty("Accept", "text/xml");
c.setRequestProperty("Connection", "close");

                os = c.openOutputStream();
                os.write(var1.getBytes());
                len =c.getLength();
            }


+ hvad gør:            os.flush(); ???
Avatar billede _carsten Nybegynder
08. december 2004 - 20:30 #10
Umiddelbart ville jeg sige at denne:  c.setRequestProperty("Content-Language", "dk-DK");
skal være:  c.setRequestProperty("Content-Language", "da-DK");

os.flush() tømmer din outputStream, altså sikrer alle data skrives

Resten ved jeg intet om!
Avatar billede iziqio Nybegynder
08. december 2004 - 20:36 #11
hvad mener du med at : alle data sikres ???
er det fint nok at den placeres til sidst ?
Avatar billede _carsten Nybegynder
08. december 2004 - 20:41 #12
Garanterer at alle data udkrives/ buffer tømmes


Kig iøvrigt på ham her, hans problem er vist kun at han sender for stor datamængde
http://forum.java.sun.com/thread.jspa?forumID=12&threadID=369386
Avatar billede _carsten Nybegynder
08. december 2004 - 20:45 #13
Glemte:    os.flush();

Ja - placeres til sidst
Avatar billede iziqio Nybegynder
08. december 2004 - 20:47 #14
han bruger
os.writeByte(var1);

Men det virker ikke...
Det jeg prøvede i starten, sender jo info til siden, mensiden modtager bare tomme felter... kan det ikke hjælpe ?
Avatar billede _carsten Nybegynder
08. december 2004 - 20:52 #15
Hmm - jeg ved ikke en dyt om det!

Men han bruger: os = c.openDataOutputStream();  det gør du ikke

Måske det, sammen med os.writeByte(var1);
Avatar billede _carsten Nybegynder
08. december 2004 - 20:54 #16
Prøv at copy/paste den model han bruger og se hvad det giver!
Avatar billede iziqio Nybegynder
09. december 2004 - 10:13 #17
Dette er svaret fra min emulator :-)

Hvordan var det nu man løste den del?
Det er jo fordi jeg binder "uploade" delen til en knap ...
--------------------------------------------------
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
--------------------------------------------------
Avatar billede iziqio Nybegynder
09. december 2004 - 10:18 #18
hvordan bruger jeg "tråde" til at løse mit problem ?
Avatar billede brilleaben Nybegynder
09. december 2004 - 10:41 #19
Lav en ny klasse der implementerer "Runnable"

public class KlasseNavn implements Runnable {
  public boolean runThread=true;

public void run() {
  while (runThread) {
      // Din kode her
  }
}

}


.. så længe runThread er true udføres din kode.  Sættes runThread til false
dør/exiter tråden.


/brian
Avatar billede brilleaben Nybegynder
09. december 2004 - 10:43 #20
Nå ja, du skal selvfølgelig huske at instantiere/starte tråden i din main klasse:

Thread t=new Thread()

t.start();
Avatar billede iziqio Nybegynder
09. december 2004 - 10:50 #21
hehe...

A Solution
public void commandAction(Command c, Displayable s) {
if (c == mConnectCommand)
{
Thread t = new Thread()
{
public void run()
{
connect(); // METODE KALDET !
}
};
t.start();
}
}

tror jeg kan klare tråd problemt, men hvordan importere jeg det ?

hvad med : ... extends MIDlet,Thread implements CommandListener {  ????
Avatar billede brilleaben Nybegynder
09. december 2004 - 11:16 #22
Burde være et forsøg værd - husk dog at implementere runnable.
Avatar billede brilleaben Nybegynder
09. december 2004 - 11:58 #23
Gosh, man skulle tro det er mandag :-)    Ovenstående tråd burde virke - glem bemærkningen om runnable :-)
Avatar billede iziqio Nybegynder
09. december 2004 - 18:50 #24
Det virker næsten... Jeg kan nu køre metoden via en knap, men der kommer stadig ingen værdier ind i databasen på hjemmesiden!
Nogen ideer ?
Der oprettes kun tommefelter. Kan det have noget at gøre med at jeg sender to variabler?
Avatar billede iziqio Nybegynder
09. december 2004 - 20:24 #25
Skal man ikke angive "length" for begge variabler?
Hvordan ligger jeg dem sammen ? (var1+var2).length ?
Hvor vigtigt er det? Tæller det hvor meget der skal afsendes?

c.setRequestProperty("Content-Length", "\""+ var1.length()+"\"" );
Avatar billede iziqio Nybegynder
09. december 2004 - 20:26 #26
skal text/xml være text/html ?
tænker på:
c.setRequestProperty("Accept", "text/xml");
Avatar billede _carsten Nybegynder
09. december 2004 - 20:48 #27
c.setRequestProperty("Content-Length", "\""+ (var1.length()+ var1.length()) + "\"" );

text/html - ville jeg mene
Avatar billede _carsten Nybegynder
09. december 2004 - 20:48 #28
c.setRequestProperty("Content-Length", "\""+ (var1.length()+ var2.length()) + "\"" );
Avatar billede brilleaben Nybegynder
10. december 2004 - 11:17 #29
Content-Type sættes til application/x-www-form-urlencoded
Content-Length sættes til

String postValues="var1="+var1+"&var2="+var2;
c.setRequestProperty("Content-Length", postValues.length());

Herefter skriver du indholdet af postValues til din server.
Avatar billede iziqio Nybegynder
11. december 2004 - 13:36 #30
Hvad gør jeg med denne del af koden ?
------------------------------------------------
                os = c.openOutputStream();
                os.write(var1.getBytes());
                len =c.getLength();
------------------------------------------------
os.write(var1.getBytes()+var2.getBytes());

eller ???
Avatar billede iziqio Nybegynder
11. december 2004 - 13:56 #31
sådan ser den ud nu!

public void SendInfo(String var1, String var2)
    {
       
            StringBuffer b = new StringBuffer();
            HttpConnection c  = null;
            OutputStream os = null;

            long len  = 0 ;
            int ch = 0;
            try{

                c = (HttpConnection)Connector.open(Url);
                c.setRequestMethod(HttpConnection.POST);
                c.setRequestProperty("Content-Length", "\""+ (var1.length()+ var2.length()) + "\"" );
                c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                c.setRequestProperty("Content-Language", "da-DK");
                c.setRequestProperty("Accept", "text/html");
                c.setRequestProperty("Connection", "close");

                os = c.openOutputStream();
               
                os.write(("var1="+var1+"&var2="+var2).getBytes());
                os.flush();

            }
Avatar billede iziqio Nybegynder
11. december 2004 - 14:43 #32
Kan det have noget at gøre med at tråden lukkes efter et angivet tid?
Når jeg sætter den til at vibere i 1 sek inden metoden kaldes - når den kun at give en spjæt fra sig. (Har lavet programmet om til midp 2.0)
Avatar billede brilleaben Nybegynder
11. december 2004 - 16:45 #33
Nej - men læs hvad jeg skrev ovenfor ...!    Din content-length fejler.

Jeg ville lave følgende ændringer:

1) før 'try':
            String postValues="var1="+var1+"&var2="+var2;

2) din Content-Length erstattes med:

            c.setRequestProperty("Content-Length", Integer.toString(postValues.length()));

3) din os.write erstattes med:

            os.write(postValues.getBytes());
Avatar billede iziqio Nybegynder
14. december 2004 - 10:24 #34
sådan, det var lige præcis det der manglede. Tusind tak. Nu virker det perfekt.
Mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester