لا يعمل Soundfereference بسيط للغاية للعب الصوت. أيه أفكار؟ (أطنان من التفاصيل)

StackOverflow https://stackoverflow.com/questions/3589395

سؤال

هل يمكن لأحد أن يخبرني بما أفعله خطأ؟ أراهن أنني أفتقد شيئًا صغيرًا. لقد نظرت إلى موقع المطور وقرأت بعض البرامج التعليمية وأنا لا أرى ما ارتكبته خطأ.

أحاول استخدام ListPreference لتحديد الصوت الذي يجب تشغيله على زر نقرة.

لدي هذا في الأعلى:

public String greensound;

هذا هو رمز Onclick الخاص بي:

case R.id.green:
     SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
     greensound  = prefs.getString("greensound", "gsone");
       if (greensound == "gsone") {
        mSoundManager.playSound(1); 
       } else if (greensound == "gstwo") {
        mSoundManager.playSound(2); 
       } else if (greensound == "gsthree") {
        mSoundManager.playSound(3);
       }
 break;

ها هي XML الخاصة بي:

<ListPreference 
android:title="Geen Button" 
android:key="greensound"
android:summary="Select sound for the Green Button" 
android:entries="@array/green_list" 
android:entryValues="@array/green_list_values"
android:defaultValue="gsone">
</ListPreference>

//I also tried removing the default value here it didnt seem to change anything but, should it be removed?

ها هي الإعدادات الخاصة بي. جافا:

package com.my.app;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Settings extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);


    }


}

وإليك صفيف بلدي إذا كان ذلك سيساعد على الإطلاق:

//This is the one I want to display to the user
    <string-array name="green_list"> 
      <item>Sound One</item>
      <item>Sound Two</item>
      <item>Sound Three</item>
      <item>Sound Four</item>
      <item>Sound Five</item>
    </string-array>


    <string-array name="green_list_values"> 
      <item>gsone</item>
      <item>gstwo</item>
      <item>gsthree</item>
      <item>gsfour</item>
      <item>gsfive</item>
    </string-array>

إليك logcat يبدو أن نوعًا ما يبدو مرتبطًا:

08-27 01:52:07.738: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.748: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.758: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}

بالنسبة لأولئك الذين قد يسألون هنا DDMS> مستكشف الملف> البيانات> البيانات> packagename> مشترك Preferences هذا ما كان هناك:

com.my.app_preferences.xml:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="redsound">rsone</string>
<string name="greensound">gsone</string>
</map>

_has_set_default_values.xml:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="_has_set_default_values" value="true" />
</map>

كل هذا يربكني أكثر حقًا لأنه ... يبدو أن Greensound يفعل == gsone لذا .... لا أفهم ما هو الخطأ حتى لا ألعب الصوت الافتراضي. ونعم ، لقد اختبرت كل هذا الرمز بدون رمز ListPreference وتعمل بشكل رائع. لست متأكدًا ما هو الخطأ

mSoundManager.playSound(1); 
mSoundManager.playSound(2); 
mSoundManager.playSound(3);
هل كانت مفيدة؟

المحلول

يتغيرون greensound == "gsone" إلى greensound.equals(gsone)

هذا خطأ شائع جدًا لمبرمجي جافا الجدد والأشخاص الذين ليس لديهم فهم جيد للمفاهيم الموجهة نحو الكائن. إليك مراجع جيدة لمقارنة الكائنات والقيم في Java

http://leepoint.net/notes-java/data/expressions/22CompareObjects.html


أيضا ، لماذا يصر الجميع على تنفيذ onClickListener في النشاط الرئيسي؟ هل هناك برنامج تعليمي جديد يقترح هذا أو شيء من هذا القبيل؟

بدلاً من ذلك ، قم بعمل فصل داخلي مجهول (ما لم يكن لديك مجموعة من الأزرار وتريد تعيين مستمعي النقرات الخاصة بهم برمجيًا.



Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new onClickListener(){

    @Override
    public void onClick(){
        Preferences pref = MyActivity.this.getSharedPreferences()
        String s = pref.getString("sound","gsone");
}
});


مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top