当前位置: 首页 > 知识库问答 >
问题:

J2ME http post错误-诺基亚Asha SDK 1.0

史意致
2023-03-14

我正在从我的J2ME应用程序向诺基亚Asha 501(s40)发出http post请求。我正在使用诺基亚Asha SDK 1.0进行开发。

一旦应用程序尝试进行超文本传输协议连接,它将直接进入try语句的最终子句,而不引发任何异常。

在模拟器中,显示以下消息-"运行此应用程序出错"-屏幕截图-链接

然后我尝试了诺基亚开发者论坛中给出的超文本传输协议示例源代码,得到了同样的结果。

下面给出了代码。

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

public class HttpPOST extends MIDlet implements CommandListener {

private static String defaultURL = "http://localhost/api/signin"; 

private Display myDisplay = null;
private Form mainScreen;
private TextField requestField; 

private Form resultScreen;
private StringItem resultField;

Command sendCommand = new Command("SEND", Command.OK, 1);
Command backCommand = new Command("BACK", Command.OK, 1);

public HttpPOST()
{
    myDisplay = Display.getDisplay(this);
mainScreen = new Form("Type in a URL:");
requestField = new TextField(null, defaultURL, 100, TextField.URL);
mainScreen.append(requestField);
mainScreen.addCommand(sendCommand);
mainScreen.setCommandListener(this);
}

public void startApp() {myDisplay.setCurrent(mainScreen);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable s) 
{ 
if (c == sendCommand) 
{
    String urlstring = requestField.getString();

    String resultstring = sendPostRequest(urlstring);

    resultScreen = new Form("POST Result:");
    resultField = new StringItem(null, resultstring);
    resultScreen.append(resultField);
    resultScreen.addCommand(backCommand);
    resultScreen.setCommandListener(this);
    myDisplay.setCurrent(resultScreen);

} 
else if (c == backCommand) 
{
    requestField.setString(defaultURL);
    myDisplay.setCurrent(mainScreen); 
}
}

public String sendPostRequest(String urlstring) 
{
HttpConnection hc = null;
DataInputStream dis = null;
DataOutputStream dos = null;

String message = "";

String requeststring = "email=test@gmail.com&password=1234";
try 
{
    hc = (HttpConnection) Connector.open(urlstring, Connector.READ_WRITE);

    hc.setRequestMethod(HttpConnection.POST);

    dos = hc.openDataOutputStream();
    byte[] request_body = requeststring.getBytes();

    for (int i = 0; i < request_body.length; i++)
    {
        dos.writeByte(request_body[i]);
    }
    // flush outdos.flush();

    dis = new DataInputStream(hc.openInputStream());

    int ch;
    while ((ch = dis.read()) != -1) 
    {
        message = message + (char) ch;
    }

}
catch (IOException ioe) 
{
    message = "ERROR";
} 
finally 
{
    try 
    { 
        if (hc != null) 
            hc.close();
    }
    catch (IOException ignored) 
    {
    }
    try 
    { 
        if (dis != null) 
            dis.close();
    } 
    catch (IOException ignored) 
    {
    } 
    try 
    { 
        if (dos != null) 
            dos.close();
    } 
    catch (IOException ignored) 
    {
    } 
}
return message;
}
}

谁来帮我解决这个问题。

提前感谢。

共有1个答案

杨和蔼
2023-03-14

请在下面找到一个例子。这对某人有帮助。它在诺基亚Asha 501中经过测试,工作正常。

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

  public class GetNpost extends MIDlet implements CommandListener
  {
private Display display;      // Reference to Display object
private Form fmMain;         // The main form
private Alert alError;       // Alert to error message
private Command cmGET;       // Request method GET
private Command cmPOST;      // Request method Post  
private Command cmExit;      // Command to exit the MIDlet
private TextField tfAcct;    // Get account number
private TextField tfPwd;     // Get password
private StringItem siBalance;// Show account balance
private String errorMsg = null;


GetNetworkConnection getObject = null;
PostNetworkConnection postObject = null;

GetNpost  mainObject = null;

public GetNpost()
{
    display = Display.getDisplay(this);

    mainObject = this;


    // Create commands
    cmGET = new Command("GET", Command.SCREEN, 2);
    cmPOST = new Command("POST", Command.SCREEN, 3);    
    cmExit = new Command("Exit", Command.EXIT, 1);

    // Textfields
    tfAcct = new TextField("Account:", "", 5, TextField.NUMERIC);
    tfPwd = new TextField("Password:", "", 10, TextField.ANY | TextField.PASSWORD);        

    // Balance string item
    siBalance = new StringItem("Balance: $", "");

    // Create Form, add commands & componenets, listen for events
    fmMain = new Form("Account Information");    
    fmMain.addCommand(cmExit);
    fmMain.addCommand(cmGET);
    fmMain.addCommand(cmPOST);

    fmMain.append(tfAcct);
    fmMain.append(tfPwd);
    fmMain.append(siBalance);

    fmMain.setCommandListener(this);   
}

public void startApp()
{
    display.setCurrent(fmMain);
}

public void pauseApp()
{ }

public void destroyApp(boolean unconditional)
{ }

public void commandAction(Command c, Displayable s)
{
    if (c == cmGET || c == cmPOST)
    {
        try 
        {
            if (c == cmGET){               
                getObject = new GetNetworkConnection();
                getObject.start();           
            }
            else{
                postObject = new PostNetworkConnection();
                postObject.start();          
            }
        }
        catch (Exception e)
        { 
            System.err.println("Msg: " + e.toString());
        }
    }
    else if (c == cmExit)
    {
        destroyApp(false);
        notifyDestroyed();
    } 
}

/*--------------------------------------------------
 * Access servlet using GET
 *-------------------------------------------------*/    
private void lookupBalance_withGET() throws IOException
{
    HttpConnection http = null;
    InputStream iStrm = null;    
    boolean ret = false;

    // Data is passed at the end of url for GET
    // don't use localhost as a ip
    String url = "http://(ip address):(port)/ServerSide/hello" + "?" +        
            "account=" + tfAcct.getString() + "&" + 
            "password=" + tfPwd.getString();


    try
    {
        http = (HttpConnection) Connector.open(url);

        //----------------
        // Client Request
        //----------------
        // 1) Send request method
        http.setRequestMethod(HttpConnection.GET);
        // 2) Send header information - none
        // 3) Send body/data -  data is at the end of URL

        //----------------
        // Server Response
        //----------------
        iStrm = http.openInputStream();      
        // Three steps are processed in this method call
        ret = processServerResponse(http, iStrm);
    }
    finally
    {
        // Clean up
        if (iStrm != null)
            iStrm.close();
        if (http != null)
            http.close();
    }

    // Process request failed, show alert    
    if (ret == false)
        showAlert(errorMsg);        
}

/*--------------------------------------------------
 * Access servlet using POST
 *-------------------------------------------------*/  
private void lookupBalance_withPOST() throws IOException
{
    HttpConnection http = null;
    OutputStream oStrm = null;
    InputStream iStrm = null;    
    boolean ret = false;

    // Data is passed as a separate stream for POST (below)
    // don't use localhost as a ip
    String url = "http://(ip address):(port)/ServerSide/hello";   



    try
    {
        http = (HttpConnection) Connector.open(url);                    

        //----------------
        // Client Request
        //----------------
        // 1) Send request type
        http.setRequestMethod(HttpConnection.POST); 

        // 2) Send header information. Required for POST to work!
        http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");


        oStrm = http.openOutputStream();      

        // If you experience connection/IO problems, try 
        // removing the comment from the following line
        //         http.setRequestProperty("Connection", "close");      

        // 3) Send data/body
        // Write account number
        byte data[] = ("account=" + tfAcct.getString()).getBytes();
        oStrm.write(data);

        // Write password
        data = ("&password=" + tfPwd.getString()).getBytes();
        oStrm.write(data);

        // For 1.0.3 remove flush command
        // See the note at the bottom of this file
        //      oStrm.flush();

        //----------------
        // Server Response
        //----------------
        iStrm = http.openInputStream();      
        // Three steps are processed in this method call      
        ret = processServerResponse(http, iStrm);
    }

    catch(Exception e){
        System.out.println("Error in Post: "+e.getMessage());
    }

    finally
    {
        // Clean up
        if (iStrm != null)
            iStrm.close();
        if (oStrm != null)
            oStrm.close();        
        if (http != null)
            http.close();
    }

    // Process request failed, show alert    
    if (ret == false)
        showAlert(errorMsg);        





}

/*--------------------------------------------------
 * Process a response from a server
 *-------------------------------------------------*/
private boolean processServerResponse(HttpConnection http, InputStream iStrm) throws IOException
{
    //Reset error message
    errorMsg = null;

    // 1) Get status Line
    if (http.getResponseCode() == HttpConnection.HTTP_OK)
    {
        // 2) Get header information - none

        // 3) Get body (data)
        int length = (int) http.getLength();
        String str;
        if (length != -1)
        {
            byte servletData[] = new byte[length];
            iStrm.read(servletData);
            str = new String(servletData);
        }
        else  // Length not available...
        {
            ByteArrayOutputStream bStrm = new ByteArrayOutputStream();

            int ch;
            while ((ch = iStrm.read()) != -1)
                bStrm.write(ch);

            str = new String(bStrm.toByteArray());
            bStrm.close();
        }

        // Update the string item on the display
        siBalance.setText(str);
        return true;

    }
    else
        // Use message from the servlet
        errorMsg = new String( http.getResponseMessage());

    return false;      
}

/*--------------------------------------------------
 * Show an Alert
 *-------------------------------------------------*/
private void showAlert(String msg)
{
    // Create Alert, use message returned from servlet
    alError = new Alert("Error", msg, null, AlertType.ERROR);

    // Set Alert to type Modal
    alError.setTimeout(Alert.FOREVER);

    // Display the Alert. Once dismissed, display the form
    display.setCurrent(alError, fmMain);            
}


public class GetNetworkConnection extends Thread{
    public void run(){
        try {
            mainObject.lookupBalance_withGET();
        }
        catch(Exception e){
            System.out.println("Error in Get Connection: "+e.getMessage());
        }
    }
}


public class PostNetworkConnection extends Thread{
    public void run(){
        try {
            mainObject.lookupBalance_withPOST();
        }
        catch(Exception e){
            System.out.println("Error in Post Connection: "+e.getMessage());
        }
    }
}


}

服务器端代码是,(它是一个servlet。名称是hello.java)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author thirumalvalavan
 */
@WebServlet(name = "hello", urlPatterns = {"/hello"})
public class hello extends HttpServlet {

/** 
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        // /*TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet hello</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet hello at " + request.getContextPath() + "</h1>");
        out.println("</body>");
        out.println("</html>");
        // */
    } finally {
        out.close();
    }
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** 
 * Handles the HTTP <code>GET</code> method.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
//        processRequest(request, response);

    String acct = request.getParameter("account"),
            pwd = request.getParameter("password");

    System.out.println("Hello Get Method::: " + acct + " " + pwd);

    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Servlet hello</title>");
    out.println("</head>");
    out.println("<body>");
    out.print("<h1>Hi Get Method: </h1> <br> <h2> Your Account is: " + acct + "<br>   Your pwd is: " + pwd + "</h2>");
    out.println("</body>");
    out.println("</html>");
    out.close();
}

/** 
 * Handles the HTTP <code>POST</code> method.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
//        processRequest(request, response);

    String acct = request.getParameter("account"),
            pwd = request.getParameter("password");

    System.out.println("Hello Post Method::: " + acct + " " + pwd);

    response.setContentType("text/plain");
    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>Servlet hello</title>");
    out.println("</head>");
    out.println("<body>");
    out.print("<h1>Hi Post Method: </h1> <br> <h2> Your Account is: " + acct + "<br> Your pwd is: " + pwd + "</h2>");
    out.println("</body>");
    out.println("</html>");
    out.close();

}

/** 
 * Returns a short description of the servlet.
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}
 类似资料:
  • 不知道说什么,如下图所示 今天刚接的电话

  • 我想知道,当你点击文本区域时,是否有方法获取诺基亚Asha 503全触控设备上弹出的键盘的参考信息。 我需要能够直接对其进行更改,添加一些按钮 我已经尝试了LWUIT的所有VirtualKeyboard方法,以及TextArea的TextEditorProvider,但这些方法根本不起作用,只是返回null或不提供预期的功能。这让我觉得Asha不支持对键盘进行更改 此外,如果有人知道如何覆盖键盘事

  • 记录一下一面and二面经历。 我的Nokia之旅始于一个月前北邮人的就业网站上看到的nokia链接,只是抱着试试的心态给他们投出了我的简历,当然投了n个职位,到后来去面试我都不记得自己曾经投过了,呵呵。 大概一周后收到了面试得invitation,是邮件形式发得,落款看得出来是个老外,职位是技术支持,当时也没想太多,因为前几天都在忙着准备 Intel得面试,对老外得面试只是试试得心态,我得面试是早

  • 技术面之后就是HR assessment,也就是Nokia的人力测评,可能和别的外企不大一样,是对人的素质的一个综合评估,要持续一整天,这个环节还是会刷人的,去之前我也上网搜了一下,知道主要是一个动物园的项目,心想Nokia也要变变吧,结果证明我错了,还是动物园,呵呵,测评有四部分:动物园+智利测试+情商测试+HR面谈。 人力测评一开始是让我们六个人做一个项目,建造一个主题动物园。大致的意思是:有

  • 我正在用J2ME编写一个游戏。我在notify()方法中遇到问题 当我从主菜单退出游戏时,它会显示我创建的退出确认屏幕,当我按LSK(左软键)说是时,我调用了notifydestromed()方法,游戏不会退出。这是我在LSK上的代码 我在游戏中只实现了1个线程,在退出时,我删除了声音,RMS,并卸载了所有资源,但仍然不起作用 除了诺基亚Asha 501之外,我的其他设备(三星、摩托罗拉、BB、L

  • 我正在努力培养Alexa技能。我仍在试图让Alexa在有意向请求时说些什么,但我遇到了一个错误,我不知道该怎么办。当我通过Alexa服务模拟器运行示例话语时,我得到了错误: 无法调用远程终结点,或者它返回的响应无效。 如果我在lambda测试事件中运行相同的语句,我得到的错误是: "错误消息":"异常:引用错误:未定义输出" 我的javascript代码是 任何帮助将不胜感激,谢谢!