【问题标题】:sending image from one mobile to another via sms using j2me language使用 j2me 语言通过短信将图像从一部手机发送到另一部手机
【发布时间】:2009-06-25 03:29:06
【问题描述】:

我正在 j2me 中编写一个移动应用程序,我需要通过短信将图像从一部手机发送到另一部手机。 在接收端遇到问题。图像没有被正确解码。它正在抛出 ioexception....我在这里发布代码..请帮助我。

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;
import java.io.IOException;
import javax.microedition.lcdui.game.*;
import java.lang.*;
import java.io.*;

public class receive_mms extends MIDlet implements CommandListener
 {
    Display disp;
    //TextBox txtbox;
    MessageConnection msgConn;  
    Message msg;
    Form frm=null;
    byte[] msgrev;
    byte[] data;
    //String msgrev;
    Image im=null;
    Image im1=null;
    ImageItem img=null;
    int i,j;
    ByteArrayInputStream bais = null;
    Command cmd_exit;


public receive_mms(){
    disp=Display.getDisplay(this);
    frm=new Form("photo dikho");
    i=frm.getWidth();
    j=frm.getHeight();
    cmd_exit=new Command("exit",Command.EXIT,1);
    frm.addCommand(cmd_exit);
    frm.setCommandListener(this);
    disp.setCurrent(frm);

    Thread t1 = new Thread()
    {
        public void run()
        {recieve();}
    };
    t1.start();


    //txtbox=new TextBox("Recieve Text","",100,TextField.ANY);      

}

public void commandAction(Command c,Displayable d)
{   
          if(c==cmd_exit)
       {  
           notifyDestroyed();          
       }
}




public void startApp(){/*
disp.setCurrent(frm);

    Thread t1 = new Thread()
    {
        public void run()
        {recieve();}
    };
    t1.start();


    */
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}

public void recieve(){
    //while(true)
    //{
        String mSenderAddress="";
        try{

        msgConn = (MessageConnection) Connector.open("sms://:1234");
        System.out.println("11");
        msg = msgConn.receive();// start listening and stuck here until a msg is received
        System.out.println("12");
        mSenderAddress = msg.getAddress();// Get info from message, from where da msg is beign sent
        System.out.println("3");
        System.out.println("add"+ mSenderAddress);
        System.out.println("msg aya:" + msg);
    msgConn.close();
        }catch(Exception e){System.out.println(e);}


        if (msg instanceof BinaryMessage) {
        //try{
            msgrev = ((BinaryMessage)msg).getPayloadData(); 
            data=msgrev.toByteArray();
            String val= new String(data);   
            System.out.println("yahoo");

            System.out.println("yahoo1");

    System.out.println(val);
            create(data); 


        }

}
public void create(byte[] bs)
{
    try
    {         
               String str=bs.toString();
            /*
            StringBuffer d=new StringBuffer();
             bais=new ByteArrayInputStream(bs);
             DataInputStream ds=new DataInputStream(bais);
             int len=bs.length;
             System.out.println("len="+len);
             if(len!=0)
             {
              int ch=0;
              while((ch=ds.read())!=-1)
              {
               d.append((char)ch);
              }

             }
        System.out.println(d);
        str=d.toString();
        */
        //str=bs.toString();
        InputStream is= this.getClass().getResourceAsStream(str);
        System.out.println("string is"+str);           
        im = (Image)Image.createImage(is);
        System.out.println("line");
        im1 = (Image)Image.createImage(im, 0, 0, i, j, Sprite.TRANS_NONE);
        img = new ImageItem("yeh photo snd hui", im1, Item.LAYOUT_CENTER, "kyu nhi dikh rhi", Item.BUTTON);
        frm.append(img);



    }
    catch (Exception e)
    {
        System.out.println(e);
    }

}
}

【问题讨论】:

  • 异常在哪里?发布堆栈跟踪或至少发布它的代码行可能会有所帮助。 IOException.toString() 是否包含消息?

标签: java-me


【解决方案1】:

你做了一些非常奇怪的事情:

  1. 将字节数组转换为字符串,尤其是使用 byte[].toString()
  2. 尝试通过使用从字节数组创建的字符串调用 Class.getResourceAsStream() 来获取 InputStream。
  3. 使用短信发送图片

Class.getResourceAsStream() 旨在获取一个字符串,用于标识 MIDlet 的 jar 文件中的资源文件。

正确的做法是从 BinaryMessage 中获取 byte[] 并使用 Image.createImage(bytes, 0, bytes.length); 来创建一个 Image;

虽然,当您使用 SMS 发送它时,我希望它确实是一个非常小的图像,否则使用此应用程序的任何人都会因将大图像拆分到多个 SMS 上而产生高成本。另请注意,某些网络会限制 SMS 可以拆分的部分数量。

你最好研究一下JSR 205提供的彩信发送功能。

【讨论】:

    【解决方案2】:

    你弄错了数据流,你必须这样做:

    public void create(byte[] bs)
    {
        try
        {      
                im = (Image)Image.createImage(bs, 0, bs.length);                
                im1 = (Image)Image.createImage(im, 0, 0, i, j, Sprite.TRANS_NONE);
                img = new ImageItem("yeh photo snd hui", im1, Item.LAYOUT_CENTER, "kyu nhi dikh rhi", Item.BUTTON);
                frm.append(img);
        }
        catch (Exception e)
        {
                System.out.println(e);
        }
    }
    

    这应该可行。

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多