2

I'm new to Android programming and as a part of learning i tried to run this open source project(below) which ends up in an error at the import com.example.android.apis.R;. Also where and all there is R. As far as i know R.java is automatically generated and we don't need to create it or edit it. What is the reason for this error. Can anyone please explain this. I used Eclipse to run this project.

package com.example.android.apis.media;

import com.example.android.apis.R;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;


public class MediaPlayerDemo_Video extends Activity implements
   OnBufferingUpdateListener, OnCompletionListener,
   OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback {

private static final String TAG = "MediaPlayerDemo";
private int mVideoWidth;
private int mVideoHeight;
private MediaPlayer mMediaPlayer;
private SurfaceView mPreview;
private SurfaceHolder holder;
private String path;
private Bundle extras;
private static final String MEDIA = "media";
private static final int LOCAL_AUDIO = 1;
private static final int STREAM_AUDIO = 2;
private static final int RESOURCES_AUDIO = 3;
private static final int LOCAL_VIDEO = 4;
private static final int STREAM_VIDEO = 5;
private boolean mIsVideoSizeKnown = false;
private boolean mIsVideoReadyToBePlayed = false;

/**
*
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle icicle) {
   super.onCreate(icicle);
   setContentView(R.layout.mediaplayer_2);
   mPreview = (SurfaceView) findViewById(R.id.surface);
   holder = mPreview.getHolder();
   holder.addCallback(this);
   holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
   extras = getIntent().getExtras();

}

private void playVideo(Integer Media) {
   doCleanUp();
   try {

       switch (Media) {
           case LOCAL_VIDEO:
               /*
                * TODO: Set the path variable to a local media file path.
                */
               path = "";
               if (path == "") {
                   // Tell the user to provide a media file URL.
                   Toast
                           .makeText(
                                   MediaPlayerDemo_Video.this,
                                   "Please edit
MediaPlayerDemo_Video Activity, "
                                           + "and set the path
variable to your media file path."
                                           + " Your media file
must be stored on sdcard.",
                                   Toast.LENGTH_LONG).show();

               }
               break;
           case STREAM_VIDEO:
               /*
                * TODO: Set path variable to progressive streamable mp4 or
                * 3gpp format URL. Http protocol should be used.
                * Mediaplayer can only play "progressive streamable
                * contents" which basically means: 1. the movie atom has to
                * precede all the media data atoms. 2. The clip has to be
                * reasonably interleaved.
                *
                */
               path = "";
               if (path == "") {
                   // Tell the user to provide a media file URL.
                   Toast
                           .makeText(
                                   MediaPlayerDemo_Video.this,
                                   "Please edit
MediaPlayerDemo_Video Activity,"
                                           + " and set the path
variable to your media file URL.",
                                   Toast.LENGTH_LONG).show();

               }

               break;


       }

       // Create a new media player and set the listeners
       mMediaPlayer = new MediaPlayer();
       mMediaPlayer.setDataSource(path);
       mMediaPlayer.setDisplay(holder);
       mMediaPlayer.prepare();
       mMediaPlayer.setOnBufferingUpdateListener(this);
       mMediaPlayer.setOnCompletionListener(this);
       mMediaPlayer.setOnPreparedListener(this);
       mMediaPlayer.setOnVideoSizeChangedListener(this);
       mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);


   } catch (Exception e) {
       Log.e(TAG, "error: " + e.getMessage(), e);
   }
}

public void onBufferingUpdate(MediaPlayer arg0, int percent) {
   Log.d(TAG, "onBufferingUpdate percent:" + percent);

}

public void onCompletion(MediaPlayer arg0) {
   Log.d(TAG, "onCompletion called");
}

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
   Log.v(TAG, "onVideoSizeChanged called");
   if (width == 0 || height == 0) {
       Log.e(TAG, "invalid video width(" + width + ") or height("
+ height + ")");
       return;
   }
   mIsVideoSizeKnown = true;
   mVideoWidth = width;
   mVideoHeight = height;
   if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
       startVideoPlayback();
   }
}

public void onPrepared(MediaPlayer mediaplayer) {
   Log.d(TAG, "onPrepared called");
   mIsVideoReadyToBePlayed = true;
   if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
       startVideoPlayback();
   }
}

public void surfaceChanged(SurfaceHolder surfaceholder, int i, int
j, int k) {
   Log.d(TAG, "surfaceChanged called");

}

public void surfaceDestroyed(SurfaceHolder surfaceholder) {
   Log.d(TAG, "surfaceDestroyed called");
}


public void surfaceCreated(SurfaceHolder holder) {
   Log.d(TAG, "surfaceCreated called");
   playVideo(extras.getInt(MEDIA));


}

@Override
protected void onPause() {
   super.onPause();
   releaseMediaPlayer();
   doCleanUp();
}

@Override
protected void onDestroy() {
   super.onDestroy();
   releaseMediaPlayer();
   doCleanUp();
}

private void releaseMediaPlayer() {
   if (mMediaPlayer != null) {
       mMediaPlayer.release();
       mMediaPlayer = null;
   }
} 

private void doCleanUp() {
   mVideoWidth = 0;
   mVideoHeight = 0;
   mIsVideoReadyToBePlayed = false;
   mIsVideoSizeKnown = false;
}

private void startVideoPlayback() {
    Log.v(TAG, "startVideoPlayback");
   holder.setFixedSize(mVideoWidth, mVideoHeight);
   mMediaPlayer.start();
}
}

This is the code i tried to run.

Jonas
  • 121,568
  • 97
  • 310
  • 388
praba230890
  • 2,192
  • 21
  • 37
  • Be sure and open the project as an Android project, and also regenerate the R.java file by `project -> Android Tools -> Fix Project Properties` – Albinoswordfish Aug 18 '11 at 17:15
  • Clean your project and try again. – aha Aug 18 '11 at 17:15
  • cleaned it. still error at these statements. setContentView(R.layout.mediaplayer_2); mPreview = (SurfaceView) findViewById(R.id.surface); – praba230890 Aug 18 '11 at 17:41
  • I think this should help you out. Your error could be because of a number of issues. http://stackoverflow.com/questions/885009/r-cannot-be-resolved-android-error – Manish Burman Aug 18 '11 at 17:16
  • For this u need to go to (right click on the app folder and then click on ANDROID TOOLS->FIX PROJECT PROPERTIES AND RESTART ECLIPSE, U WILL GET THE ERROR Resolved. – Programmer Aug 18 '11 at 17:19
  • did what u said, but still it shows error. – praba230890 Aug 18 '11 at 17:33

3 Answers3

3

I fixed this problem by changing the project build target from Android 1.6 to Android 4.2 in Project Property/*Android*.

Some new syntax in layout xml files are not supported in old version but these error information is not display in the source code but in the output window.

Robin Qiu
  • 5,521
  • 1
  • 22
  • 19
0

That implies errors on the layout or Manifest file , which are XML .

I think the common mistakes can be the error of layout design , missing tags , and so on

please Fix them first and clean the project again

Jeff Bootsholz
  • 2,971
  • 15
  • 70
  • 141
0

This can have several causes.

Make sure that you don't have any XML errors in all your files. The R. file will not be built when you have XML errors. After you fixed the errors the R. file should be built automatically. If not, try cleaning your project.

Also, make sure you do not have this line:

import android.R;

in your class.

Jacob Ras
  • 5,974
  • 1
  • 28
  • 26