由R.java引起的错误

时间:2011-08-18 17:13:17

标签: android r.java-file

我是Android编程的新手,作为学习的一部分,我试图运行这个开源项目(下面),最终导致import com.example.android.apis.R;的错误。还有R的地方和所有地方。据我所知R.java是自动生成的,我们不需要创建或编辑它。这个错误的原因是什么?任何人都可以解释一下。我用Eclipse来运行这个项目。

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();
}
}

这是我试图运行的代码。

3 个答案:

答案 0 :(得分:3)

我通过在项目属性 / * Android *中将项目构建目标从Android 1.6更改为Android 4.2来解决此问题。

旧版本不支持布局xml文件中的某些新语法,但这些错误信息不会显示在源代码中,而是显示在输出窗口中。

答案 1 :(得分:0)

这可能有几个原因。

确保您的所有文件中没有任何XML错误。当您遇到XML错误时,将不会构建R.文件 。修复错误后,应自动构建R.文件。如果没有,请尝试清理您的项目。

另外,请确保您没有此行:

import android.R;

在你班上。

答案 2 :(得分:0)

这意味着布局或清单文件(XML)上的错误。

我认为常见的错误可能是布局设计错误,缺少标签等等

请先修复它们并再次清理项目