java setDataSource 报红

本文介绍了解决在使用SpringSecurity时遇到的DataSource配置错误问题,通过在pom.xml文件中添加spring-boot-starter-jdbc依赖,成功解决了setDataSource方法报错的问题。

开始学习spring security遇到一个问题,setDataSource老是报红

解决方案,在pom.xml中增加

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
      <version>2.1.5.RELEASE</version>
  </dependency>
package com.example.audioplayer; import android.Manifest; import android.content.Intent; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.LinkedList; import java.util.Queue; public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE_PICK_AUDIO = 100; private MediaPlayer mediaPlayer; private Queue<Uri> audioQueue; private Uri currentUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 请求存储权限(Android 6.0+) ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); audioQueue = new LinkedList<>(); // 添加内置音频到队列 Uri builtInUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.sample_audio); audioQueue.offer(builtInUri); // 初始化 MediaPlayer mediaPlayer = new MediaPlayer(); Button btnAdd = findViewById(R.id.btnAddAudio); Button btnPlay = findViewById(R.id.btnPlay); Button btnPause = findViewById(R.id.btnPause); Button btnNext = findViewById(R.id.btnNext); btnAdd.setOnClickListener(v -> openAudioPicker()); btnPlay.setOnClickListener(v -> playCurrent()); btnPause.setOnClickListener(v -> mediaPlayer.pause()); btnNext.setOnClickListener(v -> playNext()); // 设置 MediaPlayer 准备完成监听 mediaPlayer.setOnCompletionListener(mp -> playNext()); } private void openAudioPicker() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(Intent.createChooser(intent, "选择音频文件"), REQUEST_CODE_PICK_AUDIO); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_PICK_AUDIO && resultCode == RESULT_OK && data != null) { Uri uri = data.getData(); if (uri != null) { // 将外部音频复制到应用私有目录以确保长期可用性 Uri copiedUri = copyUriToFile(uri); if (copiedUri != null) { audioQueue.offer(copiedUri); Toast.makeText(this, "音频已添加到播放队列", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "添加音频失败", Toast.LENGTH_SHORT).show(); } } } } // 将选中的音频复制到应用的 files 目录下 private Uri copyUriToFile(Uri uri) { try { InputStream inputStream = getContentResolver().openInputStream(uri); File file = new File(getFilesDir(), "audio_" + System.currentTimeMillis() + ".mp3"); FileOutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } outputStream.close(); inputStream.close(); return Uri.fromFile(file); } catch (IOException e) { e.printStackTrace(); Log.e("AudioPlayer", "复制音频失败: " + e.getMessage()); return null; } } private void playCurrent() { if (currentUri == null && !audioQueue.isEmpty()) { currentUri = audioQueue.peek(); } if (currentUri != null) { try { mediaPlayer.reset(); mediaPlayer.setDataSource(this, currentUri); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "播放失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(this, "没有可播放的音频", Toast.LENGTH_SHORT).show(); } } private void playNext() { if (!audioQueue.isEmpty()) { audioQueue.poll(); // 移除当前播放项 } if (!audioQueue.isEmpty()) { currentUri = audioQueue.peek(); playCurrent(); } else { Toast.makeText(this, "播放队列为空", Toast.LENGTH_SHORT).show(); } } @Override protected void onDestroy() { if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } super.onDestroy(); } } R如何解决
11-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值