เนื้อหาโปรดไม่แสดงอย่างถูกต้องบน webview


91

ฉันกำลังพัฒนาแอพพจนานุกรมภาษา ฉันบันทึกคำที่ชอบลงในค่ากำหนด เนื้อหารายการโปรดในไฟล์ XML มีลักษณะดังต่อไปนี้:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
  <map>
    <string name="history">
      dict_name::160170::hi,dict_name::157140::he-man,dict_name::184774::jet,dict_name::34527::black
    </string>
    <string name="waitingTime">
      0
    </string>
    <boolean name="saveFavourite" value="true" />
    <string name="defaultDictionary">
      dict_name
    </string>
    <string name="favourite">
      dict_name::149271::go,dict_name::25481::back,dict_name::184774::jet
    </string>
    <boolean name="saveHistory" value="true" />
  </map>

ฉันใช้รหัสต่อไปนี้เพื่อโหลดเนื้อหาที่ชื่นชอบลงใน webview:

public class User extends Activity {
    private static final String FAVOURITE_TAG = "[MyDict - FavouriteView] ";
    private static final String CONTENT_TAG = null;

    private ListView mLSTFavourite = null;
    private ArrayList<String> lstDict = null;
    private ArrayList<Integer> lstId = null;
    private ArrayList<String> mWordFavourite = null;
    private ArrayAdapter<String> aptList = null;
    private SharedPreferences prefs;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.favourite);
        prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        if (prefs.getBoolean("saveFavourite", true)) {
            String strFavourite = prefs.getString("favourite", "");
            Log.i(FAVOURITE_TAG, "Favourite loaded");
            if (strFavourite != null && !strFavourite.equals("")) {
                mWordFavourite = new ArrayList<String>(Arrays.asList(strFavourite.split(",")));
            } else {
                mWordFavourite = new ArrayList<String>();
            }
        } else {
            mWordFavourite = new ArrayList<String>();
        }

        Log.d(FAVOURITE_TAG, "mWordFavourite = " + mWordFavourite.size());
        mLSTFavourite = (ListView) findViewById(R.id.lstFavourite);

        ImageButton btnClear = (ImageButton) findViewById(R.id.btnClear);
        ImageButton btnBackToContent = (ImageButton) findViewById(R.id.btnBackToContent);

        if (lstDict == null) {
            lstDict = new ArrayList<String>();
            lstId = new ArrayList<Integer>();
            aptList = new ArrayAdapter<String>(getApplicationContext(), R.layout.customlist);
        }
        lstDict.clear();
        lstId.clear();
        aptList.clear();

        if (mWordFavourite != null && mWordFavourite.size() > 0) {
            try {
                for (int i = 0; i < mWordFavourite.size(); i++) {
                    Log.i(FAVOURITE_TAG, "item = " + mWordFavourite.get(i));
                    String arrPart[] = mWordFavourite.get(i).split("::");
                    if (arrPart.length == 3) {
                        Log.i(CONTENT_TAG, "loaded content " + arrPart.length + ", wordId = " + arrPart[1]);
                        // Log.i(CONTENT_TAG, "loaded 0");
                        lstDict.add(i, arrPart[0]);
                        // Log.i(CONTENT_TAG, "loaded 1");
                        lstId.add(i, Integer.parseInt(arrPart[1]));
                        // Log.i(CONTENT_TAG, "loaded 2");
                        aptList.add(arrPart[2]);
                    } else {
                        Log.i(FAVOURITE_TAG, "Wrong entry: " + mWordFavourite.get(i));
                    }
                }
            } catch (Exception ex) {
                Log.i(FAVOURITE_TAG, "Wrong entry found!");
            }
        }
        // Log.i(CONTENT_TAG,"Adapter size = " + aptList.getCount());
        // assign result return
        mLSTFavourite.setAdapter(aptList);
        mLSTFavourite.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {
                        // mEDWord.setText(mAdapter.getItem(arg2));
                        Intent i = new Intent();
                        i.putExtra("dict", lstDict.get(arg2));
                        i.putExtra("wordId", lstId.get(arg2));
                        setResult(RESULT_OK, i);
                        finish();
                    }
                });
        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mWordFavourite.clear();
                aptList.clear();
                mLSTFavourite.setAdapter(aptList);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("favourite", "");
                editor.commit();
                setResult(RESULT_OK);
                finish();
            }
        });

        btnBackToContent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(RESULT_CANCELED);
                finish();
            }
        });
    }
}

โหลดเนื้อหารายการโปรดสำเร็จแล้ว คำที่ชื่นชอบแสดงอยู่ในมุมมองเว็บ แต่ปัญหาคือมันแสดงเฉพาะคำจำกัดความของคำล่าสุดที่เพิ่มลงใน Favorite ไม่ว่าจะเลือกคำใดก็ตาม ตัวอย่างเช่น:

word1
word2
word3

แม้ว่า word1 และ / หรือ word2 จะถูกเลือกสำหรับความหมาย แต่คำจำกัดความของคำสุดท้ายซึ่งก็คือ word3 จะแสดงเสมอ จุดประสงค์ของฉันคือการแสดงคำจำกัดความของword1เวลาที่word1ถูกเลือกและคำจำกัดความของword2เวลาที่word2ถูกเลือกและอื่น ๆ ไปเรื่อย ๆ ฉันบันทึกข้อมูลพจนานุกรมของฉันในฐานข้อมูล SQLite

ใครสามารถช่วยแก้ปัญหานี้ได้


18
ฉันลองใช้รหัสในคำถามของคุณและเท่าที่เป็นไปดูเหมือนว่าจะส่งคืนชื่อพจนานุกรมและรหัสคำที่ถูกต้องจากข้อมูลตัวอย่างของคุณเมื่อเลือกหนึ่งในนั้นในมุมมองรายการ คุณกล่าวถึง Webview และฐานข้อมูลซึ่งคาดว่าจะได้รับและแสดงข้อมูลสำหรับคำที่เลือกสามารถให้ความช่วยเหลือเพิ่มเติมได้หากมีการให้รายละเอียดบางประการ
StevieB

6
ที่นี่คุณใช้ Android เวอร์ชันใดอยู่ 2.3 มีปัญหาเกี่ยวกับหุ้น prefs ฉันพบเจอด้วยตัวเองและดูเหมือนจะเป็นผลที่คุ้นเคย
เนบิวล่า

5
ในชื่อที่คุณพูดถึง webview WebView อยู่ที่ไหนในโค้ดของคุณ ???
Pointer Null

2
เช่นเดียวกับที่ @StevieB กล่าวไว้แล้ว; เป็นการยากเล็กน้อยที่จะให้ความช่วยเหลือที่แม่นยำยิ่งขึ้นโดยไม่ต้องเห็นรหัสที่เกี่ยวข้องกับ WebView ตามธรรมชาติฉันสามารถนึกถึงข้อมูลแคช WebView ภายใต้สถานการณ์บางอย่าง แต่อีกครั้ง: ฉันจะต้องดูว่าคุณใช้ส่วน WebView อย่างไรเพื่อให้สามารถให้ความช่วยเหลือโดยละเอียดได้มากขึ้น
dbm

2
ช่างเป็นคำถามอะไร! ฟื้นคืนชีพ 8 เดือนหลังจากความจริงยังไม่มีรหัสที่เกี่ยวข้องโพสต์และอย่างใดด้วย +74? สิ่งนี้ยังไม่ได้รับการวิจัยอย่างดีและไม่มีประโยชน์มากไปกว่าความคิดเห็นนี้
dokkaebi

คำตอบ:


3

ผมคิดว่าปัญหามาจากบรรทัดนี้

            mWordFavourite = new ArrayList<String>(Arrays.asList(strFavourite.split(",")));

ที่คุณสร้าง<string>วัตถุArrayList ใหม่ทุกครั้ง แต่คุณควรต่อท้ายหรือไม่? & รับตัวสุดท้ายมิฉะนั้นคุณควรใส่ไว้ในตัวแปรเดียว

หากคุณกำลังตรวจสอบว่าขนาดของมัน ()> 0

แต่ทุกครั้งที่คุณสร้างวัตถุใหม่โดยไม่ต่อท้าย

บางทีฉันอาจจะผิด!


2

http://developer.android.com/reference/android/webkit/WebView.html

โปรดดูลิงค์ด้านบนสำหรับข้อมูลเพิ่มเติม


ยินดีต้อนรับสู่ StackOverflow! คุณต้องการเพิ่มข้อความที่ตัดตอนมาในคำตอบของคุณเพื่อให้สามารถยืนหยัดได้ด้วยตัวเองหรือไม่?
SL Barth - คืนสถานะ Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.