Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从MainActivity类中的另一个函数访问WebView_Java_Android_Sockets_Android Webview_Listener - Fatal编程技术网

Java 从MainActivity类中的另一个函数访问WebView

Java 从MainActivity类中的另一个函数访问WebView,java,android,sockets,android-webview,listener,Java,Android,Sockets,Android Webview,Listener,如何正确访问onCreate函数中的“查看”变量?我想要loadUrl(),但它在与public Emitter.Listener onServerReceive=new Emitter.Listener(){onview=loadUrl的第行抛出一个错误: 我做错了什么,如何修复它?谢谢!在初始化之前,您正在尝试使用view。您需要等到view=(WebView)findViewById(R.id.WebView);被调用后才能初始化onServerReceive 编辑:再看一下,更可能发生的

如何正确访问
onCreate
函数中的“查看”变量?我想要
loadUrl()
,但它在与
public Emitter.Listener onServerReceive=new Emitter.Listener(){
on
view=loadUrl
的第行抛出一个错误:


我做错了什么,如何修复它?谢谢!

在初始化之前,您正在尝试使用
view
。您需要等到
view=(WebView)findViewById(R.id.WebView);
被调用后才能初始化
onServerReceive

编辑:再看一下,更可能发生的情况是,在
onCreate()
中初始化
view
之前,您正在使用
onServerRecieve
的实例


终于找到了答案和问题

我有这个

view.addJavascriptInterface(new MainActivity(), "access_android");
在web js中,我使用下面的
“access\u android.websocket\u emit()”

我认为由于
“new MainActivity()”
它创建了一个没有定义“view”的新类。所以我用
“this”
替换了
“new MainActivity()”

现在一切都好了!
谢谢再见

在我看来,您可能希望使用OnCreateView(),而不是OnCreate()。您要查找的视图可能尚未在OnCreate()中膨胀。您是否有任何代码将
null
分配给
view
?另外,您是否以任何其他方式使用了
onServerReceive
?您是否可以发布完整的代码?我添加了onConnect,但忘记了它。看起来您的“onServerReceive”在“onCreate()之前被调用了“。你能检查一下吗?对不起,我忘了告诉你我有相同的发射器。onConnect的侦听器,现在它们发生冲突,onConnect从未被触发。我编辑了第一篇文章。你能再发布一些代码吗?不清楚你是如何使用
发射器。侦听器的,但是我确信问题出在
调用()
视图
初始化之前执行。没有更多的代码了,就是这样,所有其他函数都与“视图”对象或mSocket对象无关。您能否演示如何一起使用这两个发射器。侦听器?
import com.github.nkzawa.emitter.Emitter;
....

public class MainActivity extends Activity {
    WebView view;
    Socket mSocket;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
        view = (WebView) findViewById(R.id.webView);
        view.getSettings().setJavaScriptEnabled(true);
        ...
        view.loadUrl("file:///android_asset/loading.html");

    }

    ...

    @JavascriptInterface
    public void websocket_start(){
        try {
            mSocket = IO.socket("http://some web com:8888");
            mSocket.on("connect", onConnect);
            mSocket.on("server_receive", onServerReceive);
            mSocket.connect();
        } catch (URISyntaxException e) {}
    }


public Emitter.Listener onConnect = new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                JSONObject jsonRootObject = new JSONObject();
                try {
                    jsonRootObject = new JSONObject("{ pn: " + global_login + ", pp: " + global_pass + " }");
                } catch (JSONException e) {
                    throw new RuntimeException(e);
                }
                mSocket.emit("Auth", jsonRootObject);
            }
        });
    }
};

    public Emitter.Listener onServerReceive = new Emitter.Listener() {
        @Override
        public void call(final Object... args) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    final String argsStr = TextUtils.join(",", args);
PROBLEM HERE "view" is null ->         view.loadUrl("javascript:receive('" + argsStr + "')");
                }
            });
        }
    };

}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ...
    view = (WebView) findViewById(R.id.webView);
    onServerRecieve = createListener()
    view.getSettings().setJavaScriptEnabled(true);
    ...
    view.loadUrl("file:///android_asset/loading.html");

}

...

@JavascriptInterface
public void websocket_start(){
    try {
        mSocket = IO.socket("http://some web com:8888");
        mSocket.on("connect", onConnect);
        mSocket.on("server_receive", onServerReceive);
        mSocket.connect();
    } catch (URISyntaxException e) {}
}

private Emitter.Listener createListener() {
    return new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                final String argsStr = TextUtils.join(",", args);
                view.loadUrl("javascript:receive('" + argsStr + "')");
            }
        });
    }
};
}

public Emitter.Listener onServerReceive;

}
view.addJavascriptInterface(new MainActivity(), "access_android");
view.addJavascriptInterface(this, "access_android");