开发者

error due to R.java

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 vo开发者_如何学Goid 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.


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.


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.


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜