Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

J2ME moj mali midlet nece da radi

[es] :: Java :: J2ME moj mali midlet nece da radi

[ Pregleda: 1909 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.hermes.si.



+2 Profil

icon J2ME moj mali midlet nece da radi26.01.2009. u 09:26 - pre 185 meseci
Kada treba da se povezem na neku drugu metodu recimo neka koja vraca samo string ono radi ok. Ali ova metoda mora da posalje dva parametra na WS i da na osnovu njih vrati 'string'. Problem nastaje kada u text polja ukucam username i password program me pita "...bla...bla...want's to connect to http://www......asmx using airtime. This may result in charges. Is it OK to use airtime?", ja tu kazem 'Yes' i tu se aplikacija zaustavi, nista se ne desava dalje.
Sta sam uradio?

Code:

import java.rmi.RemoteException;
import javax.xml.rpc.Stub;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;



import com.game.web.ServiceSoap_Stub;

public class HelloWorld3 extends MIDlet implements CommandListener {
    private String webServiceURL = "http://localhost/javaGame/Service.asmx";
    private Command exitCommand; 
    
    private String userDataString = "";
    private Display display;
    private TextField userName,password;
    public Form form;
    private Command login,cancel;    
    
    public HelloWorld3() {
        exitCommand = new Command("Exit", Command.EXIT, 0);
        form = new Form("Sign in");
        userName = new TextField("LoginID:", "", 30, TextField.ANY);
        password = new TextField("Password:", "", 30, TextField.PASSWORD);
        cancel = new Command("Cancel", Command.CANCEL, 2);
        login = new Command("Login", Command.OK, 2);
    }

    public void startApp() {        
        display = Display.getDisplay(this);        
        form.append(userName);
        form.append(password);
        form.addCommand(cancel);
        form.addCommand(login);
        form.setCommandListener(this);
        display.setCurrent(form);
        
    }
    
  
    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable s) {
        String label = c.getLabel();
        if(label.equals("Cancel")) {
          destroyApp(true);
        } else if(label.equals("Login")) {
          validateUser(userName.getString(), password.getString());
        }        
    }
    public void validateUser(String name, String password) {
        try{
            ServiceSoap_Stub service = new ServiceSoap_Stub();
            service._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, webServiceURL);
            service._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, Boolean.FALSE);
            userDataString = service.loginUser(name, password);
            if (userDataString != ""){
                showMsg();
            }
            else{
                tryAgain();
            }            
            
        }
        catch(RemoteException e){
            
        }        
      }  

      public void showMsg() {
        Alert success = new Alert("Your Login Process is completed!");        
        userName.setString("");
        password.setString("");
        display.setCurrent(success, form);    
      }

      public void tryAgain() {
        Alert error = new Alert("Please try again");
        error.setTimeout(900);        
        userName.setString("");
        password.setString("");
        display.setCurrent(error, form);
      }
}


 
Odgovor na temu

zigizig

Član broj: 42968
Poruke: 167
82.117.206.*



+10 Profil

icon Re: J2ME moj mali midlet nece da radi26.01.2009. u 13:07 - pre 185 meseci
Nisam gledao source code jer mi izgleda da problem nije do aplikacije vec do uredjaja sa kojeg zelis da se konektujes na internet.
Da li aplikaciju testiras iz emulatora ili na telefonu?
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.hermes.si.



+2 Profil

icon Re: J2ME moj mali midlet nece da radi27.01.2009. u 07:38 - pre 185 meseci
emulator. U eclipse onaj obican.
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.hermes.si.



+2 Profil

icon Re: J2ME moj mali midlet nece da radi27.01.2009. u 10:08 - pre 185 meseci
Provalio sam da je problem sto sam pokusao da se konektujem na server preko istog thread-a gde mi je i glavna petlja, sada sam napravio novu klasu i thread ali nemam pojma dal sam se ulogovao :) dobro. Kada me sada pita za 'airtime' ja kazem 'yes' i on me vrati u glavnu formu, ne znam sta sam zajebao :(???
Code:

import java.rmi.RemoteException;
import javax.xml.rpc.Stub;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.midlet.MIDletStateChangeException;
import com.game.web.ServiceSoap_Stub;

public class HelloWorld3 extends MIDlet implements CommandListener {
    //private String webServiceURL = "http://localhost/javaGame/Service.asmx";
    private Command exitCommand; 
    
    private String userDataString = "";
    private Display display;
    private TextField userName,password;
    public Form form;
    private Command login,cancel;    
    
    public HelloWorld3() {
        exitCommand = new Command("Exit", Command.EXIT, 0);
        form = new Form("Sign in");
        userName = new TextField("LoginID:", "", 30, TextField.ANY);
        password = new TextField("Password:", "", 30, TextField.PASSWORD);
        cancel = new Command("Cancel", Command.CANCEL, 2);
        login = new Command("Login", Command.OK, 2);
    }

    public void startApp() {        
        display = Display.getDisplay(this);        
        form.append(userName);
        form.append(password);
        form.addCommand(cancel);
        form.addCommand(login);
        form.setCommandListener(this);
        display.setCurrent(form);
        
    }
    
  
    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable s) {
        String label = c.getLabel();
        if(label.equals("Cancel")) {
          destroyApp(true);
        } else if(label.equals("Login")) {
            ConnectionLogic cn = new ConnectionLogic(userName.getString(), password.getString());
            Thread th = new Thread(cn);
            th.start();
            if (cn.GetJmbg() == "")
            {
                tryAgain();               
            }
            else
            {
                showMsg();
            }
            
            
        }        
    }
   
      public void showMsg() {
        Alert success = new Alert("Your Login Process is completed!");        
        userName.setString("");
        password.setString("");
        display.setCurrent(success, form);    
      }

      public void tryAgain() {
        Alert error = new Alert("Please try again");
        error.setTimeout(900);        
        userName.setString("");
        password.setString("");
        display.setCurrent(error, form);
      }
}
class ConnectionLogic implements Runnable
{
    private String username;
    private String password;
    
    private String jmbg;
    
    public String GetJmbg()
    {
            return jmbg;
        
    }
    
    private String webServiceURL = "http://localhost/javaGame/Service.asmx";
    public ConnectionLogic()
    {        
    }
    public ConnectionLogic(String uname, String pass)
    {
        this.username = uname;
        this.password = pass;        
    }
    public void run() 
    {
        try{
            ServiceSoap_Stub service = new ServiceSoap_Stub();
            service._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, webServiceURL);
            service._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, Boolean.FALSE);
            jmbg = service.loginUser(username, password);        
            
            }
            catch (RemoteException e){
                
            }   
        
    }
    
}

P.S.
Ovo mi je prvi put da radim sa nitima u javi :(
 
Odgovor na temu

DeYo
Dejan Vukmirovic
developer @ Mogul
Pozarevac/Bgd/Stockholm

Član broj: 36771
Poruke: 85
*.dynamic.sbb.rs.

Sajt: www.linkedin.com/in/dejan..


Profil

icon Re: J2ME moj mali midlet nece da radi29.01.2009. u 11:41 - pre 185 meseci
Samo o threading-u, nadam se da ne postoji neka drasticna razlika kod J2ME u odnosu na standardnu Javu.

Kada pozoves th.start() tvoj thread dobija zaseban kontekst izvrsavanja, nezavistan od thread-a koji ga je inicirao.
Takodje i thread inicijator nastavlja sa izvrsavanjaem, konkurentno sa thread-om koji je inicirao.
To znaci da ti dalje nemas nikakvu garanciju kako ce se Thread Scheduler ponasati i koji thread ce pustati kad da se izvrsava.

U tvom slucaju ti pozoves thread i odmah u sledecoj liniji proveravas rezultat izvrsavanja tog thread-a (!?).
Pretpostavljam da postoji neki razlog zasto si se odlucio da koristis thread-ove, ali ovako se sa njima ne radi. Moras da se obezbedis da je thread zavrsio svoj posao i presao u dead status da bi proveravao njegove efekte.
Ovako ti odmah prelazis na proveru vrednosti jmbg a najverovatnije ta vrednost nije postavljena od strane th thread-a pa te vraca na "glavnu stranu".

Takodje, linija if (cn.GetJmbg() == "") je problematicna, obzirom da proveravas String. Koristi equals() kao sto imas nesto iznad u kodu.
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
89.111.240.*



+27 Profil

icon Re: J2ME moj mali midlet nece da radi29.01.2009. u 13:40 - pre 185 meseci
Ovaj problem što spominje DeYo možeš riješiti tako što ćes napraviti jednu metodu u glavnoj klasi, a nju ćeš da pozivaš iz thread-a kad završiš obradu tamo. Kao neki callback, preko kojeg možeš da postaviš jmbg i onda da nastaviš neku obradu ili šta već. A u međuvremenu možeš da prikažeš neki ekran tipa "in progresss".
 
Odgovor na temu

zigizig

Član broj: 42968
Poruke: 167
82.117.206.*



+10 Profil

icon Re: J2ME moj mali midlet nece da radi02.02.2009. u 09:14 - pre 185 meseci
Problem koji imas sa Airtime je sto aplikacija nije potpisana, ali se tvoj problem javlja samo kod WTK.
Treba da udjes u wtk properties i setujes Security Policy: MSA i Security Domain: manufacturer
U okviru Netbeans-a (ako ga koristis) udji u project properties i setuj Sign Distributon: Yes, Keystore: Built-in keystore, Alias: untrusted

Ovo bi trebalo da resi taj problem sa Airtime, a posle ti ostaje da vidis da li je sve u redu sa aplikacijom (npr debug :)

 
Odgovor na temu

[es] :: Java :: J2ME moj mali midlet nece da radi

[ Pregleda: 1909 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.