2012-06-17 64 views
1

我正在適應舊的WebOS應用程序到Android和我幾乎所有的手機使用phonegap(因爲舊代碼是JavaScript,這很方便),但我希望使用原生的AutoCompleteTextView用於輸入。我得到一個NullPointerException,可能是由於我的異國混合應用程序。但讓我從頭開始。我追加頁腳(每一個帖子,我發現這裏),像這樣AutoCompleteTextView(ArrayAdapter)PhoneGap中的NullPointerException

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    super.loadUrl("file:///android_asset/www/index.html"); 

    /* ... boring things here ... */ 

    // http://stackoverflow.com/questions/7320910/android-phonegap-with-native-controls 
     View footer = View.inflate(getContext(), R.layout.footer, null); 
     root.addView(footer); 

    // setContentView(root); 
    // http://www.kwpro.net/blogs/2011/1/10/1651_Android_AutoComplete_Tutorial_Amendment.html   
} 

我發現對建議的解決我的問題可能是一個的setContentView博客的一些注意事項,但似乎並沒有工作。無論如何,我使用this(通過java接口通過window.f.setAutoComplete())從javascript設置自動完成文本一次。

public void setAutoComplete(String []s) { 
    Log.d(TAG, "[native]: setting autocomplete text"); 

    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.inpu); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, s); 
    textView.setAdapter(adapter); 
} 

無論如何,一切似乎工作。也就是說,選擇列表彈出,你有時可以選擇一個(有時),然後我得到一個強制關閉應用程序的NullPointerException。我覺得沒有足夠的能力來處理這個問題,所以我想我會公開問問。

的異常轉儲看起來是這樣的:

W/dalvikvm(1832): threadid=11: thread exiting with uncaught exception (group=0x409c01f8) 
E/AndroidRuntime(1832): FATAL EXCEPTION: WebViewCoreThread 
E/AndroidRuntime(1832): java.lang.NullPointerException 
E/AndroidRuntime(1832):  at android.widget.AbsListView$RecycleBin.getScrapView(AbsListView.java:5900) 
E/AndroidRuntime(1832):  at android.widget.AbsListView.obtainView(AbsListView.java:2003) 
E/AndroidRuntime(1832):  at android.widget.ListPopupWindow$DropDownListView.obtainView(ListPopupWindow.java:1168) 
E/AndroidRuntime(1832):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 
E/AndroidRuntime(1832):  at android.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1095) 
E/AndroidRuntime(1832):  at android.widget.ListPopupWindow.show(ListPopupWindow.java:524) 
E/AndroidRuntime(1832):  at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1062) 
E/AndroidRuntime(1832):  at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:939) 
E/AndroidRuntime(1832):  at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:921) 
E/AndroidRuntime(1832):  at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285) 
E/AndroidRuntime(1832):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(1832):  at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(1832):  at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:728) 
E/AndroidRuntime(1832):  at java.lang.Thread.run(Thread.java:856) 

我最好的猜測是,我正在爲「只有一個線程可以做UI的東西」 ......啊......範式,但我我不知道如何解決這個問題,如果情況不是這樣,我不知道接下來要做什麼。

+0

括號內,我也嘗試了很多事情來獲得JavaScript自動完成工作,但有這麼多的問題,我想如果我可以去本地。如果我不能,我會找出其他東西,但本機控制是如此之好,我希望我能得到這個工作。 – jettero

回答

1

從來沒有得到過對此的迴應,但萬一有其他人遇到它...自動完成的選擇是UI的一部分,所以你必須要求UI來更新它。真的很簡單。我曾經在這個問題中推測過它,但並沒有把它推斷出來。

public void setAutoComplete(String []s) { 
    Log.d(TAG, "[native]: setting autocomplete text"); 

    autoCompleteArray = s; 

    handler.post(new Runnable() { 
     public void run() { 
      hist.clear(); 
      for(int i=0; i<autoCompleteArray.length; i++) 
       hist.add(autoCompleteArray[i]); 
      hist.notifyDataSetChanged(); 
     } 
    }); 
} 
相關問題