我开发了一个搜索和播放视频的应用程序,在我的项目中,我面临着将搜索到的视频的路径传递给视频播放活动的困难。当我将视频的实际路径直接放入播放器活动时,它会视频,但如果我从意图中获取视频名称,然后我将其转换为该视频的路径。它不会变得很好。我的程序没有显示任何错误 我无法获取我从第一个活动传递的意图数据,当我将该数据设置为textview时,它显示为“null”请帮助我恢复此问题
这是我的第一项活动
public class FirstActivity extends Activity {
EditText et;
Button bt;
String filename;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firstscreen);
et = (EditText)findViewById(R.id.editText1);
filename = et.getText().toString();
bt = (Button)findViewById(R.id.button1);
final Intent i = new Intent(this, MainActivity.class);
i.putExtra("text_label", filename);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
startActivity(i);
}
});
}
}
这是我对视频播放器的第二次活动
public class MainActivity extends Activity implementsSurfaceHolder.Callback{
MediaPlayer mediaPlayer;
urfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean pausing = false;;
String uriString;
String stringPaths= "/sdcard/video/";
String stringPath;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonPlayVideo = (Button)findViewById(R.id.playvideoplayer);
Button buttonPauseVideo = (Button)findViewById(R.id.pausevideoplayer);
Intent i = getIntent();
uriString = i.getStringExtra("text_label");
stringPath = stringPaths+uriString+".3gp";
getWindow().setFormat(PixelFormat.UNKNOWN);
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setFixedSize(176, 300);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mediaPlayer = new MediaPlayer();
buttonPlayVideo.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pausing = false;
if(mediaPlayer.isPlaying()){
mediaPlayer.reset();
}
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(surfaceHolder);
try {
mediaPlayer.setDataSource(stringPath);
mediaPlayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mediaPlayer.start();
}});
buttonPauseVideo.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(pausing){
pausing = false;
mediaPlayer.start();
}
else{
pausing = true;
mediaPlayer.pause();
}
}});
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
所以这是我的问题 1.我是否已将意图核心地传递给第二项活动。 2.我应该如何连接使用文件路径字符串获取意图数据。
请帮助我 我很震惊。答案 0 :(得分:0)
问题在于onCreate方法 - 每次创建活动时都会创建您的意图,但不会向用户显示,因此TextView为空。
尝试在onClick中添加额外的意图 - 在那里你还可以检查textView是否为空。它将是这样的:
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
filename = et.getText().toString();
Intent i = new Intent(FirstActivity.this, MainActivity.class);
i.putExtra("text_label", filename);
startActivity(i);
}
});
您仍然可以在onCreate方法的范围内创建意图,使其保持最终状态,但在onClick方法中分配额外功能。
还要考虑et.getText()可以为null,而et.getText()。toString()可以生成NullPointerException,所以我宁愿将其提取到可编辑变量并检查它是否不是null而不是空。