用于更新Autocompletetextview的webview javascript界面

时间:2016-03-02 16:47:52

标签: android webview

我是Android的初学者,也是Stackoverflow的新手。请原谅我的愚蠢问题。但是我在这里找不到解决方案,所以把它作为一个新问题发布。

我有一个包含Autocompletetextview和webview的活动。我想点击webview中的超链接来填充Autocompletetextview中的一些文本。所以我在网页中调用了Javascript,后者又调用了Javascript AppInterface。在界面功能中,我想更新Autocompletetextview文本。

我可以从javascript收集文本。但是在设置Autocompletetextview的文本时,我的应用程序崩溃了。

WebAppInterface.java

public class JsInterface {
 @JavascriptInterface
 public void NewText(final String text)
{
Log.d("New_Text", "" + text); //Works fine till here.
((Activity)mContext).findViewById(R.id.autoCompleteTextView);
Handler mHandler = new Handler();
mHandler.post(new Runnable() {
    @Override
    public void run() {
        AutoCompleteTextView SearchTextbox = (AutoCompleteTextView) ((Activity)mContext).findViewById(R.id.autoCompleteTextView);
        SearchTextbox.setText(text);
    }
   });
 }
}

应用崩溃时出错

E/AndroidRuntime: FATAL EXCEPTION: JavaBridge
 Process: com.test.xxx, PID: 22102
 java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity
 at com.test.xxx.WebAppInterface$1.run(WebAppInterface.java:102)
 at android.os.Handler.handleCallback(Handler.java:733)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:136)
 at android.os.HandlerThread.run(HandlerThread.java:61)

我想知道我的更新UI组件的方法是否正确? 如果是,那么哪些更改将解决错误并且可以正常工作。

2 个答案:

答案 0 :(得分:1)

该行

  

java.lang.ClassCastException:android.app.Application无法强制转换为android.app.Activity

是不言自明的。您将mContext投射到Activity,而它不是Activity类的实例。

您可以向setAutoCompleteTextView课程添加名为JsInterface的方法,您可以在该课程中保留对该自动完整文字视图的引用。

public void setAutoCompleteTextView(AutoCompleteTextView textview){
    this.mTextView = textview;
}

在JavaScript界面​​方法中,请像this.mTextView.set...()一样使用它。

答案 1 :(得分:0)

关键是:

java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity

这意味着有问题的行中的mContext变量是Application对象而非Activity,因此请参阅Activity,而不是Application分配给Option Explicit Private Sub SetDueButton_Click() Dim UF As UserForm1 'you can declare a user form as an independent object UF.Show DueDate.Value = UF.tempdate 'get the property Unload UF 'now you can unload or set to Nothing End Sub 1}}。