2009-06-25 9 views
0

私はモバイルアプリケーションをj2meでプログラミングしていますが、モバイルからsms経由でイメージを送信する必要があります。 受信エンドで問題が発生しています。画像が正しくデコードされていません。ioexceptionを投げています....ここにコードを投稿しています.plzは私を助けます。あなたは、いくつかの非常に奇妙なものをやっているj2me言語を使用してSMS経由でイメージを1つのモバイルから別のモバイルに送信

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); 
    } 

} 
} 
+0

ここで例外はありますか?スタックトレースまたはそれをスローするコード行を少なくとも投稿すると役立つ可能性があります。 IOException.toString()にメッセージが含まれていますか? –

答えて

1

:呼び出すことによって、InputStreamを取得しようとし、特に、バイト[]を使用して、文字列をバイト配列に変換

  1. をのtoString()
  2. バイト配列から作成されたStringを持つClass.getResourceAsStream()画像

Class.getResourceAsStreamを(送信するSMSを使用して

  • )はMIDletののjarファイル内のリソースファイルを識別する文字列を取ることを意図しています。

    これを行う正しい方法は、BinaryMessageからbyte []を取得し、これを使用してImage.createImage(bytes、0、bytes.length)を使用してImageを作成することです。

    SMSを使用して送信しても、実際には非常に小さい画像だったと思いますが、このアプリを使用している人は複数のSMSで大きな画像を分割するとコストが高くなります。また、一部のネットワークでは、SMSを分割できる部分の数が制限されていることに注意してください。

    JSR 205が提供するMMS送信機能の調査を行うほうがずっと良いでしょう。

  • 0

    あなたがここに、間違ったデータ・ストリームを取得しているが、あなたがそれを行う必要があります方法です。

    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); 
        } 
    } 
    

    これは動作するはずです。

    関連する問題