Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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:AsyncTask正在抛出错误_Android_Service - Fatal编程技术网

Android:AsyncTask正在抛出错误

Android:AsyncTask正在抛出错误,android,service,Android,Service,我正在尝试让我的第一个Android服务开始工作。我有一个基本上生成随机数的服务。我想让它使用这个服务更新Android视图上的文本。我正在调度一个AsyncTask,它成功地更新了文本,但由于某种原因,我在日志中得到了这个异常。例外情况如下: 03-20 09:58:37.242: ERROR/AndroidRuntime(594): FATAL EXCEPTION: AsyncTask #1 java.lang.RuntimeException: An error occur

我正在尝试让我的第一个Android服务开始工作。我有一个基本上生成随机数的服务。我想让它使用这个服务更新Android视图上的文本。我正在调度一个AsyncTask,它成功地更新了文本,但由于某种原因,我在日志中得到了这个异常。例外情况如下:

03-20 09:58:37.242: ERROR/AndroidRuntime(594): FATAL EXCEPTION: AsyncTask #1
        java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:200)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
        at java.lang.Thread.run(Thread.java:1096)
        Caused by: java.lang.NullPointerException
        at com.denniss.Main$2.doInBackground(Main.java:51)
        at com.denniss.Main$2.doInBackground(Main.java:47)
        at android.os.AsyncTask$2.call(AsyncTask.java:185)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
        ... 4 more
03-20 09:58:37.272: WARN/ActivityManager(58): Force finishing activity com.denniss/.Main
03-20 09:58:39.051: ERROR/ActivityThread(594): Activity com.denniss.Main has leaked ServiceConnection com.denniss.Main$1@44e87110 that was originally bound here
        android.app.ServiceConnectionLeaked: Activity com.denniss.Main has leaked ServiceConnection com.denniss.Main$1@44e87110 that was originally bound here
        at android.app.ActivityThread$PackageInfo$ServiceDispatcher.<init>(ActivityThread.java:1121)
        at android.app.ActivityThread$PackageInfo.getServiceDispatcher(ActivityThread.java:1016)
        at android.app.ContextImpl.bindService(ContextImpl.java:863)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:347)
        at com.denniss.Main.onStart(Main.java:73)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
        at android.app.Activity.performStart(Activity.java:3781)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
        at android.app.ActivityThread.access$2300(ActivityThread.java:125)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:123)
        at android.app.ActivityThread.main(ActivityThread.java:4627)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:521)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
        at dalvik.system.NativeStart.main(Native Method)
03-20 09:58:37.242:错误/AndroidRuntime(594):致命异常:AsyncTask#1
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done(AsyncTask.java:200)
位于java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:124)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
位于java.util.concurrent.FutureTask.run(FutureTask.java:137)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
运行(Thread.java:1096)
原因:java.lang.NullPointerException
com.denniss.Main$2.doInBackground(Main.java:51)
com.denniss.Main$2.doInBackground(Main.java:47)
位于android.os.AsyncTask$2.call(AsyncTask.java:185)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 4更多
03-20 09:58:37.272:WARN/ActivityManager(58):强制完成活动com.denniss/.Main
03-20 09:58:39.051:错误/活动线程(594):活动com.denniss.Main已泄漏ServiceConnection com.denniss.Main$1@44e87110原来是订在这里的
android.app.ServiceConnection泄漏:Activity com.denniss.Main已泄漏ServiceConnection com.denniss.Main$1@44e87110原来是订在这里的
位于android.app.ActivityThread$PackageInfo$ServiceDispatcher。(ActivityThread.java:1121)
在android.app.ActivityThread$PackageInfo.getServiceDispatcher(ActivityThread.java:1016)上
位于android.app.ContextImpl.bindService(ContextImpl.java:863)
位于android.content.ContextWrapper.bindService(ContextWrapper.java:347)
位于com.denniss.Main.onStart(Main.java:73)
位于android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
位于android.app.Activity.performStart(Activity.java:3781)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
在android.app.ActivityThread.access$2300(ActivityThread.java:125)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:123)
位于android.app.ActivityThread.main(ActivityThread.java:4627)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
在dalvik.system.NativeStart.main(本机方法)
Main.java

public class Main extends Activity {

    private IRandomNumberService randomNumberService;
    private int currentNumber = -1;
    private boolean connected = false;
    private TextView randomNumberText;
    private ServiceConnection serviceConnection;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("******** onCreate");
        setContentView(R.layout.main);
        randomNumberText = (TextView) findViewById(R.id.random_number);

        serviceConnection = new ServiceConnection() {
            public void onServiceConnected(ComponentName componentName, IBinder service) {
                System.out.println("onService Connected Called");
                currentNumber = 1;
                randomNumberService = IRandomNumberService.Stub.asInterface(service);
            }

            public void onServiceDisconnected(ComponentName componentName) {
                System.out.println("Service Disconnected");
                randomNumberService = null;
            }
        };

        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... voids) {
                try {
                    currentNumber = randomNumberService.getRandomNumber();
                    System.out.println("Current Number: " + currentNumber);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                System.out.println("Setting Current Number:  " + currentNumber);
                randomNumberText.setText(new Integer(currentNumber).toString());
            }
        }.execute();
    }

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("******** on Start");
        if (!connected) {
            connected = bindService(new Intent(Main.this, RandomNumberService.class), serviceConnection, Context.BIND_AUTO_CREATE);
            Log.i("Service Status: ", "Connected? " + connected);
        }
        if (!connected) {
            throw new RuntimeException("Cannot connect to service");
        }
    }
}
public类主扩展活动{
私有iRandomNumber服务RandomNumber服务;
私有int currentNumber=-1;
私有布尔连接=假;
私有文本视图随机数文本;
专用服务连接服务连接;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
System.out.println(“*********onCreate”);
setContentView(R.layout.main);
randomNumberText=(TextView)findViewById(R.id.random_number);
serviceConnection=新的serviceConnection(){
服务连接上的公共无效(组件名称组件名称,IBinder服务){
System.out.println(“被调用的服务连接”);
currentNumber=1;
randomNumberService=IRandomNumberService.Stub.asInterface(服务);
}
ServiceDisconnected上的公共无效(ComponentName ComponentName){
系统输出打印项次(“服务断开”);
randomNumberService=null;
}
};
新建异步任务(){
@凌驾
受保护的空位背景(空位…空位){
试一试{
currentNumber=randomNumberService.getRandomNumber();
System.out.println(“当前编号:+currentNumber”);
}捕获(远程异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
System.out.println(“设置当前编号:+currentNumber”);
randomNumberText.setText(新整数(currentNumber.toString());
}
}.execute();
}
@凌驾
受保护的void onStart(){
super.onStart();
System.out.println(“启动时的******”);
如果(!已连接){
connected=bindService(新意图(Main.this、RandomNumberService.class)、serviceConnection、Context.BIND\u AUTO\u CREATE);
Log.i(“服务状态:,“已连接?”+已连接”);
}
如果(!已连接){
抛出新的RuntimeException(“无法连接到服务”);
}
}
}

看起来randomNumberService为空,当您调用randomNumberService.getRandomNumber()时;它抛出空指针异常

在执行异步任务之前,您应该等待服务连接完成,因为它依赖于您的服务连接。很可能获取randomNumberService的服务完成的速度不够快,您的异步任务无法获得RandomNumber的有效值