Intereting Posts
«GoogleApiClient еще не подключен» при выходе из системы при использовании Firebase auth с подписью google Как нарисовать круг после увеличения в андроиде ViewFlipper: приемник не зарегистрирован Разница между android: id, android: имена и теги имен в файлах Android XML FEATURE_ACTIVITY_TRANSITIONS против FEATURE_CONTENT_TRANSITIONS INSTALL_FAILED_NO_MATCHING_ABIS при установке apk Белый фон в диалоговом окне предупреждения Не удается создать подписанный пакет Android через визуальную студию cordova Могу ли я использовать совместимую панель действий И фрагмент в том же самом действии? Невозможно импортировать или создавать новый проект из образцов или загрузок на Android / Eclipse Android: воспроизведение звука с помощью WebView Статические переменные, какова их продолжительность жизни? ActionBar MenuItem Divider Фатальный сигнал 11 (SIGSEGV) при 0x00000000 (код = 1), поток 32140 Расширения OpenGL, доступные на разных устройствах Android

Доступ к WebView из другой функции класса MainActivity

Как правильно получить доступ к переменной «view» в функции onCreate ? Я хочу loadUrl() но он выдает ошибку в строке с public Emitter.Listener onServerReceive = new Emitter.Listener() { on view = loadUrl :

 E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at com.myapp.MainActivity$7$1.run(MainActivity.java:399) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:177) at android.app.ActivityThread.main(ActivityThread.java:4947) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) at dalvik.system.NativeStart.main(Native Method) 
 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 + "')"); } }); } }; } 

Что я делаю неправильно, как это исправить? благодаря!

Solutions Collecting From Web of "Доступ к WebView из другой функции класса MainActivity"

Вы пытаетесь использовать view перед его инициализацией. Вам нужно подождать, пока после view = (WebView) findViewById(R.id.webView); Был вызван для инициализации onServerReceive .

EDIT: Если вы onServerRecieve на это, скорее всего, вы используете свой экземпляр onServerRecieve перед инициализацией представления в onCreate() .

 @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"); 

И в web js я обратился к андроиду с этим "access_android.websocket_emit()"

И я думаю, что из-за "new MainActivity()" он создавал новый класс, где «view» не был определен. Поэтому я заменил "new MainActivity()" на "this"

 view.addJavascriptInterface(this, "access_android"); 

Теперь все работает отлично! Спасибо досвиданиЯ