Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Android 如何使用Firebase JobDispatcher进行nv websocket客户端的异步重新连接?_Android_Firebase_Websocket_Android Jobscheduler_Firebase Job Dispatcher - Fatal编程技术网

Android 如何使用Firebase JobDispatcher进行nv websocket客户端的异步重新连接?

Android 如何使用Firebase JobDispatcher进行nv websocket客户端的异步重新连接?,android,firebase,websocket,android-jobscheduler,firebase-job-dispatcher,Android,Firebase,Websocket,Android Jobscheduler,Firebase Job Dispatcher,在Android应用程序中(使用MinsdkVersion16),我使用库: 在AndroidManifest.xml中,我有: <service android:name=".MainActivity$ReconnectService" android:exported="false"> <intent-filter> <action android:name="com.firebase.jobdispatcher.ACTI

在Android应用程序中(使用
MinsdkVersion16
),我使用库:

在AndroidManifest.xml中,我有:

<service
    android:name=".MainActivity$ReconnectService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
    </intent-filter>
</service>
有人知道这里出了什么问题吗


我还将我的问题提交为。

重新连接服务
放在它自己的类中(不是
MainActivity
的内部类)。或者,尝试使内部类
静态


Java中非静态内部类的工作方式是,它们只能由外部类的实例实例化。这就是允许内部类的实例访问外部类的成员的原因。所以,当Android试图创建内部类的实例时,它不能这样做,因为它不知道外部类的哪个实例应该是它的一部分。错误消息有点误导。

谢谢Doug(+1)周日的回复!),但是如果我将内部类更改为
static
,那么我就无法再访问
mWs
mWsFactory
mWsListener
。如何解决这个问题?另外,我也很困惑,如果调用
mWs.connectAsynchronously()
并因此(重新)使用另一个线程后,我应该通过
onStartJob()
返回
true
。是的,这不是Android中服务的工作方式。他们有自己完全独立于活动的背景。他们应该以这种方式保持孤立。考虑重新构造代码,以便在活动本身内不管理WebSoT,或者查看另一种方式来重新连接服务(例如,带有调度消息的处理程序)。
private FirebaseJobDispatcher mReconnectDispatcher;

public class ReconnectService extends JobService {
    @Override
    public boolean onStartJob(JobParameters job) {
        try {
            mWs = mWsFactory.createSocket("ws://demos.kaazing.com/echo");
            mWs.addListener(mWsListener);
            mWs.connectAsynchronously(); // uses background thread
        } catch (Exception ex) {
            Log.w(TAG, "Can not create WebSocket connection", ex);
        }

        return true; // Answers the question: "Is there still work going on?"
    }

    @Override
    public boolean onStopJob(JobParameters job) {
        return false; // Answers the question: "Should this job be retried?"
    }
}

private void reconnect() {
    Job myJob = mReconnectDispatcher.newJobBuilder()
        .setService(ReconnectService.class)
        .setTag(ReconnectService.class.getSimpleName())
        .setRecurring(false)
        .setLifetime(Lifetime.UNTIL_NEXT_BOOT)
        .setTrigger(Trigger.executionWindow(0, 60))
        .setReplaceCurrent(true)
        .setConstraints(Constraint.ON_ANY_NETWORK)
        .build();

    mReconnectDispatcher.mustSchedule(myJob);
}
<service
    android:name=".MainActivity$ReconnectService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
    </intent-filter>
</service>
16998-16998/de.slova E/AndroidRuntime: FATAL EXCEPTION: main
   Process: de.slova, PID: 16998
   java.lang.RuntimeException: Unable to instantiate service de.slova.MainActivity$ReconnectService: java.lang.InstantiationException: java.lang.Class<de.slova.MainActivity$ReconnectService> has no zero argument constructor
       at android.app.ActivityThread.handleCreateService(ActivityThread.java:3389)
       at android.app.ActivityThread.-wrap4(Unknown Source:0)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1683)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6541)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: java.lang.InstantiationException: java.lang.Class<de.slova.MainActivity$ReconnectService> has no zero argument constructor
       at java.lang.Class.newInstance(Native Method)
       at android.app.ActivityThread.handleCreateService(ActivityThread.java:3386)
       at android.app.ActivityThread.-wrap4(Unknown Source:0) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1683) 
       at android.os.Handler.dispatchMessage(Handler.java:105) 
       at android.os.Looper.loop(Looper.java:164) 
       at android.app.ActivityThread.main(ActivityThread.java:6541) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
1472-1487/? I/ActivityManager: Showing crash dialog for package de.slova u0
public class ReconnectService extends JobService {
    public ReconnectService() {
    }