0

私はjavameプロジェクトを持っていて、mp3ファイルをダウンロードして電話に保存するメソッドを作成しようとしています。メソッドを以下に示しますが、残念ながら、java.lang.illegalargument例外の例外をスローし続けます。

    public void Download_KeyTest()
    {
        FileConnection file = null;
        OutputStream outStream = null;
        String resumeJSON = mPreferences.get("resume");
        JSONObject resumeObject;
        try {
            resumeObject = new JSONObject(resumeJSON);
            String key=resumeObject.get("code").toString();
            String inputStr=getTextField12().getString();
            if (inputStr.equals(key))
            {
            Enumeration roots = FileSystemRegistry.listRoots();
            String currentRoot = null;
            while (roots.hasMoreElements()) {
                currentRoot = (String) roots.nextElement();
                System.out.println(currentRoot);
                }
            HttpConnection hc = null;
            DataInputStream in = null;
            try {
            String url = d_url+resumeObject.getJSONObject("sObject").get("loc").toString();
            String sname = urlEncode(resumeObject.getJSONObject("sObject").getString("name").toString());
            hc = (HttpConnection)Connector.open(url);
            int length = (int)hc.getLength();
            byte[] data = null;
            if (length != -1) {
                switchDisplayable(null,getWaitScreen1());
                data = new byte[length];
                in = new DataInputStream(hc.openInputStream());
                in.readFully(data);
                }
                else {
                // If content length is not given, read in chunks.
                switchDisplayable(null,getWaitScreen1());
                int chunkSize = 512;
                int index = 0;
                int readLength = 0;
                in = new DataInputStream(hc.openInputStream());
                data = new byte[chunkSize];
                do {
                    if (data.length < index + chunkSize) {
                    byte[] newData = new byte[index + chunkSize];
                    System.arraycopy(data, 0, newData, 0, data.length);
                    data = newData;
                    }
                    readLength = in.read(data, index, chunkSize);
                    index += readLength;
                } while (readLength == chunkSize);
            length = index;
            }
            getWaitScreen1().setText("Download Complete");
try {
            // Get path to photos folder.
            String dirMusic = System.getProperty("fileconn.dir.memorycard.music");
            if(dirMusic == null) {
                dirMusic=currentRoot;
                //throw new Exception("Unable get music folder name");
            }

            String fileName = dirMusic + sname +".mp3";
            // Open file
            file = (FileConnection)Connector.open(fileName, 
                    Connector.READ_WRITE);
            // If there is no file then create it
            if(file.exists() == false) {
                file.create();
            }
            // Write data received from camera while making snapshot to file
            outStream = file.openOutputStream();
            outStream.write(data);
            System.out.println(file.availableSize());
            //file.setHidden(false);

            getWaitScreen1().setText("Song saved to music folder.");

        } catch(IOException ioe) {
           Alert alertx = new Alert("IO error", ioe.toString(), null, AlertType.ERROR);
           alertx.setTimeout(Alert.FOREVER);
           switchDisplayable(alertx,getDownloadVerifyKeyForm());
        } catch(Exception exc) {
           Alert alertx = new Alert("Error", exc.toString()+exc.getMessage(), null, AlertType.ERROR);
           exc.printStackTrace();
           alertx.setTimeout(Alert.FOREVER);
           switchDisplayable(alertx,getDownloadVerifyKeyForm());
        } finally {
            // Try to close file
            try {
                if(outStream != null) {
                    outStream.close();
                }
                if(file != null) {
                    file.close();
                }
            } catch(Exception exc) {
                // Do nothing 
                exc.printStackTrace();
            }
        }            
        }
        catch (Exception ex)
        {
        ex.printStackTrace();    
        }
            }
        } catch (Exception ex)
        {
        ex.printStackTrace();    
        }
    }

これが私が得るエラーです

java.lang.IllegalArgumentException
    at javax.microedition.io.Connector.getProtocolInstance(), bci=28
    at javax.microedition.io.Connector.open(), bci=24
    at javax.microedition.io.Connector.open(), bci=3
 - spinapp.SpinApp.Download_KeyTest(SpinApp.java:703)

703行目はコードのこれです

hc = (HttpConnection)Connector.open(url);
4

1 に答える 1

2

Connector.open(String)URLが無効な場合はスローさIllegalArgumentExceptionれるため、実際に確認する必要があるのは、渡した正確なURLです。

スタックオーバーフローのコメントの書式設定が機能する方法のため、どのURLであるかを判断するのは少し難しいです。後で参照できるように、正確なURLをコメントに貼り付ける場合は、その周りに1つの目盛りが付いたコードとしてフォーマットしてください。urlしたがって、変数にプロトコルプレフィックスが含まれているかどうかを判断するのは少し難しいです。

ただし、完全なURLはおそらく次のようになります。

http://127.0.0.1/relief/api/uploads/p17gnmso5duql0lnhevja15td5.mp3

もちろん、URLをテストするときは、通常、URLをデスクトップブラウザに貼り付けて、そこでも機能することを確認することもお勧めします。このURL(host = 127.0.0.1)は、シミュレーターと同じマシンでサーバーを実行していることを示しています。

(これは別のポイントをもたらします...これはあなたの質問の電話用であるとあなたは言いますが、127.0.0.1サーバーアドレスはあなたがシミュレーターで実行している場合にのみ機能します)


編集:コメントをもう一度確認した後、代わりにこの行で例外が発生していないかどうか疑問に思います:

     file = (FileConnection)Connector.open(fileName, 
                Connector.READ_WRITE);

fileNameがに等しい場合は、その呼び出しのプロトコルがありroot1/bogolako.mp3ません。シミュレータで実際に有効な絶対パスであると仮定して、プレフィックスを付ける必要があります。fileName"file:///""/root1/"

J2MEファイル接続の例についてはこちらをご覧ください

于 2013-02-17T21:55:31.527 に答える