Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > GET


Автор: WGR 21.8.2006, 21:57
как сделать минимальное приложение на j2me 
для для передачи переменной скрипту методом GET

желательно максимально минимальное (ничего лишнего для экономии трафика)

Автор: WGR 21.8.2006, 22:31
Я недавно в j2me и вот что могу сделать пока
а дальше подскажите.....

Код

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class WGR extends MIDlet implements CommandListener {
    private Display display;
    private Command exitCommand= new Command("Выход", Command.EXIT, 1);
    private Command z= new Command("Запрос", Command.SCREEN, 2);
    private Form myform = new Form("Это форма");
    
    public WGR() {
        display = Display.getDisplay(this);
    }

    public void startApp() {
        myform.addCommand(exitCommand);
        myform.addCommand(z);
        myform.setCommandListener(this);
        display.setCurrent(myform);      
    }

    public void commandAction(Command c, Displayable s) {        
        if (c == exitCommand) {
            destroyApp(false);
            notifyDestroyed();
        }    
        if (c == z) {
        //запрос 
        }    
    }      
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    
}


Автор: Frog 22.8.2006, 00:55

А дальше так - вот самый простой  код , не я его создал - но я его опробовал - работает.

Код


  public void commandAction(Command c, Displayable s) {

    // when user clicks on the "send" button on mainScreen
    if (c == sendCommand) {                                                                // change to Your "z" :)

      // retrieve the Web url that user entered
      String urlstring = requestField.getString();

      // send a GET request to Web server
      String resultstring = "";
      try {
        resultstring = sendGetRequest(urlstring);
      } catch (IOException e) {
        resultstring = "ERROR";
      }

      // display the page content retrieved from Web server
      resultScreen = new Form("GET Result:");
      resultField =
      new StringItem(null, resultstring);
      resultScreen.append(resultField);
      resultScreen.addCommand(backCommand);
      resultScreen.setCommandListener(this);
      myDisplay.setCurrent(resultScreen);

    } else if (c == backCommand) {

      // do it all over again
      requestField.setString(defaultURL);
      myDisplay.setCurrent(mainScreen);
    }
  }

  // send a GET request to Web server
  public String sendGetRequest(String urlstring) throws IOException {

    HttpConnection hc = null;
    DataInputStream dis = null;

    String message = "";
    try {

      // open up an HttpConnection with the Web server
      // the default request method is GET.
      hc = (HttpConnection) Connector.open(urlstring);
      hc.setRequestMethod(HttpConnection.GET);

      //System.out.println(HttpConnection.POST);
     // no-store, no-cache, must-revalidate
      // obtain a DataInputStream from the HttpConnection
      dis = new DataInputStream(hc.openInputStream());

      // retrieve the contents of the requested page from Web server
      int ch;
      while ((ch = dis.read()) != -1) {
        message = message + (char) ch;
      }
    } finally {
      if (hc != null) hc.close();
      if (dis != null) dis.close();
    }
    return message;
  }



Автор: WGR 23.8.2006, 12:51
Изрядно попател чтобы втюрить его и свой код
вот тока WTK23 Зависает при запросе

что это 
почему?????????7

полный код вот 
Код

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
//import javax.microedition.io.HttpConnection;
//import javax.microedition.io.Connector;
import java.io.DataInputStream;


public class WGR extends MIDlet implements CommandListener {
    private Display display;
    private Command exitCommand= new Command("Выход", Command.EXIT, 1);
    private Command z= new Command("Запрос", Command.SCREEN, 2);
    private Command backCommand= new Command("Назад", Command.SCREEN, 2);
    private Form myform = new Form("Это форма");
    private Form resultScreen = new Form("GET Result:");
    private TextField requestField = new TextField("Адресс", "http://www.xxx.ru/xxx.php?k=s&t=123",100,TextField.URL);
    private StringItem resultField;
    

    public WGR() {
        display = Display.getDisplay(this);
    }

    public void startApp() {
        myform.append(requestField);
        myform.addCommand(exitCommand);
        myform.addCommand(z);
        myform.setCommandListener(this);
        display.setCurrent(myform);      
    }

    public void commandAction(Command c, Displayable s) {        
        if (c == exitCommand) {
            destroyApp(false);
            notifyDestroyed();
        }    
        

        //запрос 
       if (c == z) {           
      String urlstring = requestField.getString();
      String resultstring = "";
      try {
        resultstring = sendGetRequest(urlstring);
      } catch (java.io.IOException e) {
        resultstring = "ERROR";
      }
      resultField =new StringItem(null, resultstring);
      resultScreen.append(resultField);
      resultScreen.addCommand(backCommand);
      resultScreen.setCommandListener(this);
      display.setCurrent(resultScreen);

    } else if (c == backCommand) {
      requestField.setString("http://www.xxx.ru/xxx.php?k=s&t=123");
      display.setCurrent(myform);
    }
  }


public String sendGetRequest(String urlstring) throws java.io.IOException {
    HttpConnection hc = null;
    DataInputStream dis = null;

    String message = "";
    try {
      hc = (HttpConnection) Connector.open(urlstring);
      hc.setRequestMethod(HttpConnection.GET);
      dis = new DataInputStream(hc.openInputStream());
      int ch;
      while ((ch = dis.read()) != -1) {
        message = message + (char) ch;
      }
    } finally {
      if (hc != null) hc.close();
      if (dis != null) dis.close();
      }
    return message;
}    
         
   
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    
}


Добавлено @ 12:56 
WTK23  ВЫдаёт
Warning: To avoid potential deadlock, operations that may block, such as 
 networking, should be performed in a different thread than the 
 commandAction() handler.

Предупреждение: Чтобы избегать потенциального тупика, операции, которые могут блокировать, типа организации сети, должны быть выполнены в различной нити чем commandAction () тренер.

Автор: Dancer 23.8.2006, 13:01
Ну, всё правильно он тебе и говорит smile))

здесь читай, должно будет хоть что-то прояснить 
http://www.mobilab.ru/articles/15/

Автор: WGR 23.8.2006, 15:04
Dancer, взал код отсюда
http://www.mobilab.ru/articles/15/ 
тоже самое вылазит (не че не менял взял как есть)
У меня в WTK ни один пример с http не запускается

Добавлено @ 15:05 
вот что пишет -вчём лажа то?????????????

java.lang.InstantiationException: Class not a MIDlet

    at com.sun.midp.midlet.MIDletState.createMIDlet(+51)

    at com.sun.midp.midlet.Selector.run(+22)

Автор: Frog 23.8.2006, 15:46
Код испытывался "на живую" - на Нокии 6100 и Мотороле RAZR он работает - на Samsung Е600 - нет (причины неизвестны).
На эмуляторе Нокиа серия 40 версия 1 (7210) - работает нормально.  
Cоединение происходило с php-скриптом на сервере.  На  запрос мидлета получал соответствующий ответ из скрипта на серваке.

Автор: WGR 23.8.2006, 18:30
Блин не на wtk 
ни на NHAL

ни на 7210 не прёт 
кто скаже чё таке?

Автор: WGR 23.8.2006, 18:36
Что не раз такого ни у каго не было в wtk?

Автор: javastic 24.8.2006, 09:27
Он же тебе пишет, что класс не является мидлетом. =) Запость код, будет ясно.

Автор: WGR 24.8.2006, 11:12
это у меня на всех примерах (http) из WTK23 и WTK21 вылазит
включая код с этой страници 
http://www.mobilab.ru/articles/15/

вчём бида не знаю 

ни одно сетевое приложение (стандартные из wtk) не запускается 

но опера.jad и jimm.jad на эмуляторах пашут  
я вот думаю мощ ПО глючит или ОС

у меня стоят пакеты
jSE v 1.4.2_01
jSE v 1.4.2_09
J2ME WTK 21 
J2ME WTK 23 

мош кто скажет ресурс по j2me побоьше чем на vingrade 

Автор: Dancer 24.8.2006, 13:56
горемычный ты наш smile), у тебя прокси какое-нить стоит или нет? (если стоит, не забудь это дело указать в настройках WTK. )
WTK->Edit->Preferences:
  1.1.Network Configuration (здесь делаешь настроки своего прокси, и не забудь поставить HTTP/1.0)
1.2. Security (в этой вкладке установи, что у тебя приложение trusted -> Security domain: trusted)
2. Открывай своё приложение в WTK, заходи в настройки приложения (Settings)
3. Выбирай вкладку Permissions. Добавляй в MIDlet-Permissions: javax.microedition.io.Connector.http

Далее пробуй пускать своё приложение (пусть это будет какое нибудь лучше из примеров WTK для начала, не забудь проверить Settings)

Да, и нахрена тебе JSE 1.4.2_01 и 09?

снеси Java (все пакеты) и поставь один единственный что нить из последнего лучше (1.4.2_12 например, только 1.5 не ставь, хотя именно он кажется нужен для WTK 23, точно не помню. У меня у самого 1.4.2_12 с WTK22) проблем никогда таких не возникало ......

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)