2012-09-09 3 views
1

Activity을 사용하여 Android 기기에서 Bluetooth를 사용하도록 설정하려고합니다. 다음은 내가 Activity 클래스를 확장 한 클래스입니다. startActivityForResult() 메서드를 호출 할 때 NullPointerException 오류가 발생합니다. 어떤 제안? 고맙습니다! 다음과 같이Android에서 활동을 연장하고 사용하려고 할 때 오류가 발생했습니다.

public class Activities extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
    protected void connectBluetooth(){ 
     Intent intentBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 

     startActivityForResult(intentBluetooth, 0); 
    } 
} 

로그 출력은 아래

?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): java.lang.NullPointerException 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.app.Activity.startActivityForResult(Activity.java:3351) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.app.Activity.startActivityForResult(Activity.java:3312) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at com.eyesore.bluetooth.Activities.connectBluetooth(Activities.java:28) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at com.eyesore.bluetooth.BluetoothModule.example(BluetoothModule.java:77) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:60) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:636) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:831) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:307) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.os.Handler.dispatchMessage(Handler.java:95) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at android.os.Looper.loop(Looper.java:137) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15246 W/System.err ] 
?:??: W/?(?): at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:104) 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [6,293329] ----- Titanium Javascript Runtime Error ----- 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [0,293329] - In app.js:71,12 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [0,293329] - Message: Uncaught Error: Java Exception occurred 
?:??: W/?(?): [ 09-09 18:08:38.497 15231:15231 E/TiJSError ] 
?:??: W/?(?): (main) [0,293329] - Source: bluetooth.example(); 
?:??: W/?(?): [ 09-09 18:08:38.517 15231:15246 E/V8Exception ] 
?:??: W/?(?): Exception occurred at app.js:71: Uncaught Error: Java Exception occurred 

매니페스트 파일 -

<manifest> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
    <uses-permission android:name="android.permission.BLUETOOTH"/> 
    <uses-permission android:name="android.bluetooth.adapter.action.REQUEST_ENABLE"/> 
     <application> 
      <activity android:name=".Activities" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application>    
</manifest> 
+0

게시물을 편집하여 충돌로 인한 LogCat 출력을 표시 할 수 있습니까? – Eric

+0

물론입니다. 업데이트 된 게시물을 참조하십시오. – Garrett

+0

자, 언제'connectBluetooth'를 부를까요? 'onCreate'에서 호출해야합니다. – Eric

답변

0

영업의 의견을 바탕으로, 당신은 제대로 Activity을 시작되지 않습니다. Activity을 사용하여 new을 시작하십시오.

먼저 Activites은 다음과 같이 표시되어야하며 connectBluetooth()을 단독으로 호출해야합니다.

public class Activities extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     connectBluetooth(); 
    } 
    protected void connectBluetooth(){ 
     Intent intentBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 

     startActivityForResult(intentBluetooth, 0); 
    } 
} 

는 안드로이드 응용 프로그램은 defined in the manifest 메인 Activity를 실행, 시작합니다. Activities이 주 Activity 인 경우 추가 코드는 필요하지 않습니다.

그러나 나는 이것이 어딘가에서 시작되는 두 번째 Activity이라는 직감을 얻습니다. ,

public class MainActivity extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startActivity(new Intent(this, Activities.class)); // Starts an Activity properly 
    } 
} 

이 당신의 Activity 시작됩니다 onCreate를 호출하고 제대로 블루투스 연결을 만들 :

대신 일을해야 무엇
public class MainActivity extends Activity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Activities testActivities = new Activities(); // This is bad! 
     testActivities.connectBluetooth(); // This too! 
    } 
} 

은 이것이다 : 그럼이 있다고 가정 해 봅시다. 수명주기가 Activity 인 경우 this documentation을 읽어야합니다.

+0

이것은 내 부분에 대한 개념 증명 일 뿐이므로 현재 실제로는 다른 활동이 없습니다. 위의 내 매니페스트 파일 하위 섹션을 삭제했습니다. 정확한 것으로 보이시겠습니까? 고맙습니다. – Garrett

+0

그 말이 맞아. '활동 testActivities = 새로운 활동(); '이라고 부르는 곳에서? – Eric

+0

이 모듈의 기본 클래스에서 호출하고있었습니다. 이 클래스의 다른 로직 (또는 현재이 모듈 모두)은 블루투스가 활성화되었는지 여부를 테스트하고 있었지만, 그렇지 않은 경우에는이를 실행하려고 시도했습니다. 논리적 인 일은 논리를 connectBluetooth() 메소드로 옮기는 것이라고 생각합니다. – Garrett

관련 문제