【问题标题】:NullPointer Exception in Send SMS in J2ME在 J2ME 中发送 SMS 中的 NullPointer 异常
【发布时间】:2012-10-22 20:38:54
【问题描述】:

我正在尝试从 J2ME 应用程序发送 SMS,但我收到 NullPointer 异常。这是我的整个代码。如果您有任何想法,请帮助我。非常感谢...我正在使用 MessageConnection 在 J2ME 中发送短信。请纠正我的错误。

import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.wireless.messaging.*;

public class SendSms extends MIDlet implements CommandListener {

    Display display;
    private TextField toWhom;
    private TextField message;
    private Alert alert;
    private Command send, exit;
    MessageConnection clientConn;
    private Form compose;

    public SendSms() {
        display = Display.getDisplay(this);
        compose = new Form("Compose Message");
        toWhom = new TextField("To", "", 10, TextField.PHONENUMBER);
        message = new TextField("Message", "", 600, TextField.ANY);
        send = new Command("Send", Command.BACK, 0);
        exit = new Command("Exit", Command.SCREEN, 5);
        compose.append(toWhom);
        compose.append(message);
        compose.addCommand(send);
        compose.addCommand(exit);
        compose.setCommandListener(this);

    }

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

    public void pauseApp() {
    }

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

    public void commandAction(Command cmd, Displayable disp) {
        if (cmd == exit) {
            destroyApp(false);
        }
        if (cmd == send) {
            String mno = toWhom.getString();
            String msg = message.getString();
            if (mno.equals("")) {
                alert = new Alert("Alert");
                alert.setString("Enter Mobile Number!!!");
                alert.setTimeout(Alert.FOREVER);
                display.setCurrent(alert);
            } else {
                try {
                    clientConn = (MessageConnection) Connector.open("sms://" + mno);
                } catch (Exception e) {
                    alert = new Alert("Alert");
//                    alert.setString("Unable to connect to Station because of network problem");
                    alert.setString(e.getMessage()+"|"+e.toString());
                    System.out.println(e.getMessage()+"|"+e.toString());
                    alert.setTimeout(2000);
                    display.setCurrent(alert);

                }
                try {
                    TextMessage textmessage = (TextMessage) clientConn.newMessage(MessageConnection.TEXT_MESSAGE);
                    textmessage.setAddress("sms://" + mno);
                    textmessage.setPayloadText(msg);
                    clientConn.send(textmessage);
                } catch (Exception e) {
                    Alert alert = new Alert("Alert", "", null, AlertType.INFO);
                    alert.setTimeout(Alert.FOREVER);
                    alert.setString(e.getMessage()+"|"+e.toString());
                    System.out.println(e.getMessage()+"|"+e.toString());
                    display.setCurrent(alert);
                }
            }
        }
    }
}

【问题讨论】:

  • 在哪里你得到了异常?哪条线?
  • 我认为我在 Last Try Catch 块中遇到了异常。我认为短信中有一些问题。 >> TextMessage textmessage = (TextMessage) clientConn.newMessage(MessageConnection.TEXT_MESSAGE);

标签: java java-me sms send sms-gateway


【解决方案1】:

我怀疑问题是clientConn 为空。

毕竟,您是在前一个 try 块中为其分配了一个值 - 但是如果您从第一个块中捕获异常,您将继续就好像它已经工作了。不要那样做。

【讨论】:

  • 非常感谢..我没有添加权限:MIDlet-Permissions: javax.microedition.io.Connector.sms,javax.wireless.messaging.sms.send 这是我的愚蠢错误..但是非常感谢您的回复。
  • @RiddhiBarbhaya:但这不是完整的解决方案 - 您应该解决这样一个事实,即当第一个 try 块中引发异常时,无论出于何种原因,下一个块肯定会失败......
【解决方案2】:

这是我的代码,我可以从中完美发送 SMS。只需在 Midlet 中添加权限。 MIDlet-权限:javax.microedition.io.Connector.sms,javax.wireless.messaging.sms.send

我的代码是,

import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.wireless.messaging.*;

public class SendSms extends MIDlet implements CommandListener {

    Display display;
    private TextField toWhom;
    private TextField message;
    private Alert alert;
    private Command send, exit;
    MessageConnection clientConn;
    private Form compose;

    public SendSms() {
        display = Display.getDisplay(this);
        compose = new Form("Compose Message");
        toWhom = new TextField("To", "", 10, TextField.PHONENUMBER);
        message = new TextField("Message", "", 600, TextField.ANY);
        send = new Command("Send", Command.BACK, 0);
        exit = new Command("Exit", Command.SCREEN, 5);
        compose.append(toWhom);
        compose.append(message);
        compose.addCommand(send);
        compose.addCommand(exit);
        compose.setCommandListener(this);

    }

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

    public void pauseApp() {
    }

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

    public void commandAction(Command cmd, Displayable disp) {
        if (cmd == exit) {
            destroyApp(false);
        }
        if (cmd == send) {
            String mno = toWhom.getString();
            String msg = message.getString();
            if (mno.equals("")) {
                alert = new Alert("Alert");
                alert.setString("Enter Mobile Number!!!");
                alert.setTimeout(Alert.FOREVER);
                display.setCurrent(alert);
            } else {
                try {
                    clientConn = (MessageConnection) Connector.open("sms://" + mno);
                } catch (Exception e) {
                    alert = new Alert("Alert");
//                    alert.setString("Unable to connect to Station because of network problem");
                    alert.setString(e.getMessage()+"|"+e.toString());
                    System.out.println(e.getMessage()+"|"+e.toString());
                    alert.setTimeout(2000);
                    display.setCurrent(alert);

                }
                try {
                    TextMessage textmessage = (TextMessage) clientConn.newMessage(MessageConnection.TEXT_MESSAGE);
                    textmessage.setAddress("sms://" + mno);
                    textmessage.setPayloadText(msg);
                    clientConn.send(textmessage);
                } catch (Exception e) {
                    Alert alert = new Alert("Alert", "", null, AlertType.INFO);
                    alert.setTimeout(Alert.FOREVER);
                    alert.setString(e.getMessage()+"|"+e.toString());
                    System.out.println(e.getMessage()+"|"+e.toString());
                    display.setCurrent(alert);
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多