마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

죄송합니다 토글버튼 블루투스 on/off 다시올리겠습니다.

0 추천

죄송합니다. 안드로이드 펍 개발자분들 제가 경황이 없어서 소스코드만 올렸네요..

어플이 시작하자마자 죽어버리는데요 원인이 뭔지모르겠네요 

에러는 08-13 12:46:10.178: E/AndroidRuntime(16376): Caused by: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.ToggleButton 현재 이게 문제가 되는것같습니다.

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

		public  class MainActivity extends Activity  {
			  
				
        private static final int REQUEST_ENABLE_BT = 0;
		private static final BluetoothAdapter mBluetoothAdapter = null;



		public void onCreate(Bundle savedInstanceState) 
			{
				
				super.onCreate(savedInstanceState);
				
				setContentView(R.layout.activity_main);
				//ImageButton bluetooth=(ImageButton) findViewById(R.id.bluetoothbtn);
				//bluetooth.setOnClickListener((OnClickListener) this);
				
				//if(btService ==null){
					//btService=new Bluetooth(this,mHandler);
				//}
				//bluetooth.setSelected(true);
				final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
				final boolean hasBluetooth = (mBluetoothAdapter == null);
				final ToggleButton bluetooth = (ToggleButton) findViewById(R.id.bluetoothbtn);
				final ToggleButton earphone=(ToggleButton) findViewById(R.id.earphonnbtn);
				final ToggleButton phonemic=(ToggleButton) findViewById(R.id.phonemic);
		        //bluetooth.setChecked(false);
				bluetooth.setOnClickListener(new OnClickListener()
				{
				  public void onClick(View v)
				  {
				    // Perform action on clicks
				    if (bluetooth.isChecked())
				    {
				      if (hasBluetooth && !mBluetoothAdapter.isEnabled())
				      {
				        // prompt the user to turn BlueTooth on
				        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
				        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
				      }
				    }
				    else
				    {
				      if (hasBluetooth && mBluetoothAdapter.isEnabled())
				      {
				        
				        boolean isDisabling = mBluetoothAdapter.disable();
				        if (!isDisabling)
				        {
				          
				        }
				      }
				    }
				  }
				});
				
				
			   
		   	}
		    
        protected void onActivityResult (int requestCode, int resultCode, Intent data)
        {
          if ((requestCode == REQUEST_ENABLE_BT) && (resultCode == RESULT_OK))
          {
			boolean isEnabling = mBluetoothAdapter.enable();
            if (!isEnabling)
            {
              // an immediate error occurred - perhaps the bluetooth is already on?
            }
            else if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_TURNING_ON)
            {
             
            }
          }
        }

ture false일때 버튼이구요

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/gbutton" android:state_checked="false"/>
    <item android:drawable="@drawable/rbutton" android:state_checked="true"/>
</selector>

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/circle_gray_red"/>
</layer-list>

 

 
레이아웃상에서의 코드입니다.  
<ToggleButton
                android:id="@+id/phonemic"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_above="@+id/textView2"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="10dp"
                android:textOn=""
                android:textOff=""
                android:background="@drawable/t_gray_red" />
 <ToggleButton
                android:id="@+id/bluetoothbtn"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_alignParentBottom="true"
                android:layout_alignRight="@+id/textView2"
                android:layout_marginBottom="10dp"
                android:background="@drawable/t_gray_red" />
 <ToggleButton
                android:id="@+id/earphonebtn"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_below="@+id/textView3"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="11dp"
                android:textOn=""
                android:textOff=""
                android:background="@drawable/t_gray_red" />

 

며칠째 에러의 원인이 뭔지를 모르겠네요 ㅜㅜ 

삐삐빠뿌 (710 포인트) 님이 2015년 8월 13일 질문

2개의 답변

0 추천
 
채택된 답변
에러는 ImageButton을 ToggleButton으로 Cast하는데 그럼 않된다고 하는 건데요...

근데 layout은 다 ToggleButton 인데요 훔..

R.java가 정상적으로 않만들어지는 상황인가요?

제가 볼땐 혹시 리소스컴파일이 재실행되지 않아서 생긴것이 아닌가 의심되어지내요.

clean이나 refresh나 등으로 리소스 컴파일이 다시 되게 해보셔야하는데요..

xml에 먼가 주석문이라도 한줄 넣었다 다시 컴파일 해보거나. 강재로 R.java파일을 지워 보시거나...

해보셔야할듯..
컴러기 (22,230 포인트) 님이 2015년 8월 13일 답변
삐삐빠뿌님이 2015년 8월 13일 채택됨
강제로 R.java 지우면 컴파일할때 다시 자동으로 생기나요???


위의 오류와 똑같은오류인것같긴하지만
추가로 이오류도 뜨네요...
08-13 13:53:44.421: E/AndroidRuntime(24617): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sorynoryui/com.example.sorynoryui.MainActivity}: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.ToggleButton
자동으로 생깁니다. 레이아웃 파일이 activity_main.xml이 맞나요?
맞다면, 코드는 이상이 없고 다른 곳에서 에러가 나서, 컴파일이 안되어,
기존 빌드했던 APK가 실행 되는 듯 합니다.
컴파일 에러가 난곳이 있는지 확인 해 보세요
0 추천
clean 후 재빌드 하면 해결되는 문제입니다.
중견수 (5,600 포인트) 님이 2015년 8월 13일 답변
...