1

Sphero ロボット ボールを使用するゲームを作成しています。ゲームが起動/再開すると、ペアまたは接続されたボールがチェックされます。Bluetooth がオフの場合、またはペアリングされたボールがない場合は、接続ウィンドウが非表示になります。ペアになっているが接続されていないボールがある場合、この関数に移動します。

// If the user clicked a Sphero and it failed to connect, this event will be fired
@Override
public void onRobotConnectionFailed(Robot robot) {
    Log.d("activity", "onRobotConnectionFailed");
    removeConnectionView();
}

以下の方法でクラッシュします。

private void removeConnectionView() {
    mFrameLayout.removeView(mSpheroConnectionView);
    mSpheroConnectionView = null;
}

この関数は、可能な結果同士で機能します。これがエラーです。

Thread [<14> Thread-2606] (Suspended (exception ViewRootImpl$CalledFromWrongThreadException))   
<VM does not provide monitor information>   
ViewRootImpl.checkThread() line: 5031   
ViewRootImpl.invalidateChildInParent(int[], Rect) line: 998 
FrameLayout(ViewGroup).invalidateChild(View, Rect) line: 4358   
ImageView(View).invalidate(boolean) line: 10565 
ImageView(View).invalidate() line: 10520    
ImageView.invalidateDrawable(Drawable) line: 202    
XDrawable(Drawable).invalidateSelf() line: 382  
XDrawable(Drawable).setVisible(boolean, boolean) line: 578  
ImageView.onDetachedFromWindow() line: 1196 
ImageView(View).dispatchDetachedFromWindow() line: 12136    
FrameLayout(ViewGroup).dispatchDetachedFromWindow() line: 2824  
RelativeLayout(ViewGroup).dispatchDetachedFromWindow() line: 2824   
SpheroConnectionView$SpheroItemView(ViewGroup).dispatchDetachedFromWindow() line: 2824  
SpheroConnectionView$SpheroListView(ViewGroup).dispatchDetachedFromWindow() line: 2824  
SpheroConnectionView(ViewGroup).dispatchDetachedFromWindow() line: 2824 
FrameLayout(ViewGroup).removeViewInternal(int, View) line: 3943 
FrameLayout(ViewGroup).removeViewInternal(View) line: 3918  
FrameLayout(ViewGroup).removeView(View) line: 3850  
discgroove.removeConnectionView() line: 233 
discgroove.access$4(discgroove) line: 232   
discgroove$2.onRobotConnectionFailed(Robot) line: 191   
SpheroConnectionView$4.onRobotConnectionFailed(Robot) line: 157 
RobotProvider.update(Observable, Object) line: 570  
Robot(Observable).notifyObservers(Object) line: 138 
Robot.setConnected(boolean) line: 300   
DeviceConnection$4.run() line: 378  
4

2 に答える 2

2

メインスレッドからはUI関連のことしかできません。メインルーパーを使用してハンドラーを作成し、そのハンドラーにランナブルを投稿してみてください。

元。

private Handler mHandler = new Handler(Looper.getMainLooper());
.
.
.
mHandler.post(new Runnable() {
        public void run() {
            removeConnectionView();
        }
    });
于 2013-04-26T22:21:15.163 に答える