Android can't create handler inside thread that has not called looper.prepare()
13,187
Your error is basically saying that you're trying to do something in a non UIThread. To run it in the UI Thread, just use this:
runOnUiThread(new Runnable() {
public void run() {
// do your work right here
}
});
Author by
user1331120
Updated on June 04, 2022Comments
-
user1331120 almost 2 years
I started developing an Android application that record a video and I need to gather the GPS location every 1 minute
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create an instance of Camera mCamera = getCameraInstance(); // Create our Preview view and set it as the content of our activity. mPreview = new CameraPreview(this, mCamera); FrameLayout preview = (FrameLayout) findViewById(id.camera_preview); preview.addView(mPreview); private boolean isRecording = false; // Add a listener to the Capture button Button captureButton = (Button) findViewById(id.button_capture); captureButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { if (isRecording) { // stop recording and release camera mMediaRecorder.stop(); // stop the recording releaseMediaRecorder(); // release the MediaRecorder object mCamera.lock(); // take camera access back from MediaRecorder // inform the user that recording has stopped setCaptureButtonText("Capture"); isRecording = false; } else { // initialize video camera if (prepareVideoRecorder()) { // Camera is available and unlocked, MediaRecorder is prepared, // now you can start recording mMediaRecorder.start(); // get the gps data GpsDataFile.getOutPutDataFile(DATA_TYPE_GPS); mTimer = new Timer; mTimer.schedule(new setGpsDataToFile(),0,1000) // inform the user that recording has started setCaptureButtonText("Stop"); isRecording = true; } else { // prepare didn't work, release the camera releaseMediaRecorder(); // inform user } } } } Private Class setGpsDataToFile extends TimerTask { @Override public void run { // getLocation contains another timer task myLocation.getLocation(getApplicationContext(), mLocationResult); // I got the error here // write the gps data in a file gpsDataCapture(GpsDataFile, mLatitude, mLongitude); } }
I got the error
FATAL EXCEPTION: Timer-1: can't create handler inside thread that has not called looper.prepare()
and I think the problem is that I create a handler inside an other. So is there an other way to get the same result?