2011-12-28 9 views
0

皆さん、私はしばらくの間見てきましたが、私の質問に対する答えを見つけることができませんでした。私はAndroidプログラミングを初めて勉強していますが、多少のJavaを大学で取得しましたが、他の言語を使って概念を理解しています。私はどのように私は私の保存機能に作成した配列を実装するかを尋ねています。私はどのように知っていると思っただけですが、saveasRing(0)の配列には元の値が入っていますが、強制的に閉じるので、私は尋ねています。ここに私のコードです。Androidアプリでサウンドを保存するための配列を設定する

誰かにコードを書いてもらうことを要求するのではなく、何をすべきかを説明することです...私は学びたいと思います。私は何かを見落としていますが、そうでなければ正しい方向に導きます。 ありがとうございました!

String[] name ={ "a1", "a", "b","c"}; //code shortened 
int[] sounds = {R.raw.a1, R.raw.a }; //code shortened for ease of reading 

public void function1(int id){ // when I change int to int[] Eclipse wants me 
           // to change alot of things and then the app will 
           // force close on start 
    saveasRing(sounds);   // right here I have tried passing "0" instead 
           // of sounds, a no go. 

    Toast.makeText(this, "Saved as Ringtone", Toast.LENGTH_SHORT).show(); 
}//Closes Function 1 

//Save as Ringtone Coding for Function 3 
public boolean saveasRing(int ressound){ 
    byte[] buffer=null; 
    InputStream fIn = getBaseContext().getResources().openRawResource(ressound); 
    int size=0; 

    try { 
    size = fIn.available(); 
    buffer = new byte[size]; 
    fIn.read(buffer); 
    fIn.close(); 
    } 
    catch (IOException e) { 
    // TODO Auto-generated catch block 
    return false; 
    } 

    String path="/sdcard/media/audio/ringtones/"; 
    String filename= name +".mp3"; 

    boolean exists = (new File(path)).exists(); 
    if (!exists){new File(path).mkdirs(); } 

    FileOutputStream save; 
    try { 
    save = new FileOutputStream(path+filename); 
    save.write(buffer); 
    save.flush(); 
    save.close(); 
    } 
    catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    return false; 
    } 
    catch (IOException e) { 
    // TODO Auto-generated catch block 
    return false; 
    }  

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
       Uri.parse("file://"+path+filename))); 

    File k = new File(path, filename); 
    ContentValues values = new ContentValues(); 
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
    values.put(MediaStore.MediaColumns.TITLE, "dosequis"); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
    values.put(MediaStore.Audio.Media.ARTIST, "Most Interesting Man "); 
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); 
    values.put(MediaStore.Audio.Media.IS_ALARM, false); 
    values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

    //Insert it into the database 
    this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 

    return true; 
} 
//Closes Save as Ringtone 

ここでは、着信音が長時間鳴ったときに起こる現象について説明します。コンテクストメニューはうまくいきます。強制的にクローズしてこれらのエラーが発生したときに、保存するタイプを選択したときだけです。もう一度あなたの時間をありがとう。

これをフォーマットするより良い方法がある場合は教えてください。

W/ResourceType(225):No package identifier when getting name for resource number 0x00000000 

D/AndroidRuntime(225):Shutting down VM 

W/dalvikvm(225): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 

E/AndroidRuntime(225):Uncaught handler: thread main exiting due to uncaught exception 

E/AndroidRuntime(225):android.content.res.Resources$NotFoundException: Resource ID #0x0 

E/AndroidRuntime(225):at android.content.res.Resources.getValue(Resources.java:891) 

E/AndroidRuntime(225):at Android.content.res.Resources.openRawResource(Resources.java:816) 

E/AndroidRuntime(225):at android.content.res.Resources.openRawResource(Resources.java:798) 

E/AndroidRuntime(225):at tomcavell.app.DosEquisSoundboardActivity.saveasRing(DosEquisSoundboardActivity.java:270) 

E/AndroidRuntime(225):at tomcavell.app.DosEquisSoundboardActivity.function1(DosEquisSoundboardActivity.java:253) 

E/AndroidRuntime(225):at tomcavell.app.DosEquisSoundboardActivity.onContextItemSelected(DosEquisSoundboardActivity.java:245) 

E/AndroidRuntime(225):at android.app.Activity.onMenuItemSelected(Activity.java:2174) 

E/AndroidRuntime(225):at com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2731) 

E/AndroidRuntime(225):at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:139) 

E/AndroidRuntime(225):at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 

E/AndroidRuntime(225):at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:129) 

E/AndroidRuntime(225):at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884) 

E/AndroidRuntime(225):at android.widget.AdapterView.performItemClick(AdapterView.java:284) 

E/AndroidRuntime(225):at android.widget.ListView.performItemClick(ListView.java:3285) 

E/AndroidRuntime(225):at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640) 

E/AndroidRuntime(225):at android.os.Handler.handleCallback(Handler.java:587) 

E/AndroidRuntime(225):at android.os.Handler.dispatchMessage(Handler.java:92) 

E/AndroidRuntime(225):at android.os.Looper.loop(Looper.java:123) 

E/AndroidRuntime(225):at android.app.ActivityThread.main(ActivityThread.java:4363) 

E/AndroidRuntime(225):at java.lang.reflect.Method.invokeNative(Native Method) 

E/AndroidRuntime(225):at java.lang.reflect.Method.invoke(Method.java:521) 

E/AndroidRuntime(225):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 

E/AndroidRuntime(225):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

E/AndroidRuntime(225):at dalvik.system.NativeStart.main(Native Method) 

I/dalvikvm(225): threadid=7: reacting to signal 3 

I/dalvikvm(225): Wrote stack trace to '/data/anr/traces.txt' 
+1

問題がどこにあるのかを実際に知るためには、logcatで取得している例外を含める必要があります。 IOストリームの読み書きに関するいくつかの問題がありますが、これは他の問題につながる可能性がありますが、その強制終了はなぜ容易ではないのでしょうか。 – chubbsondubs

+0

ようこそStackOverflowへ。コードを適切に書式設定し、タブではなくインデントするためにスペースを使用してください。 (ヒント:質問を入力する場所のすぐ下に投稿の書式をリアルタイムでプレビューすることができます)。適切に書式を設定すると、人々が読めるようになり、回答を得るチャンスが増し、他の人がそれを編集してください。 :)ありがとう。 –

+0

Kenに感謝します。私が言ったように、私はJavaに新しいこと、そしてそれをフォーマットする方法です。今のところ私は今のように見せます!ありがとうございました。 – Cavell219

答えて

0

私は考えました。私はint型でコードを設定しなければならなかったし、その後int型

j=sounds[i]; //(assuming j was the int declared) 

としては、次に

saveasRing[i]; 

のように私にsaveasRing関数を渡すことを設定見て、ご協力いただきありがとうございます!

関連する問題