Java 如何解决此错误:Android资源链接失败?

Java 如何解决此错误:Android资源链接失败?,java,android,android-studio,vector,audio-recording,Java,Android,Android Studio,Vector,Audio Recording,下面这两个代码在我的Android Studio项目的同一个MainActivity中 1) 从智能手机录制音频并在按下播放按钮时播放: public class Main2Activity extends AppCompatActivity { //Declare variables Button btnRecord, btnStopRecord, btnPlay, btnStop; //String pathSave =""; private static

下面这两个代码在我的Android Studio项目的同一个MainActivity中

1) 从智能手机录制音频并在按下播放按钮时播放:

public class Main2Activity extends AppCompatActivity {

    //Declare variables
    Button btnRecord, btnStopRecord, btnPlay, btnStop;
    //String pathSave ="";
    private static String pathSave;
    MediaRecorder mediaRecorder;
    MediaPlayer mediaPlayer;

    final int REQUEST_PERMISSION_CODE=1000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        //Request Runtime permission
        if(!checkPermissionFromDevice()){
            requestPermission();
        }


        //Init View
        btnPlay = (Button) findViewById(R.id.btnPlay);
        btnRecord = (Button) findViewById(R.id.btnStartRecord);
        btnStop = (Button) findViewById(R.id.btnStop);
        btnStopRecord = (Button) findViewById(R.id.btnStopRecord);



        btnRecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick (View view){

                if (checkPermissionFromDevice())
                {

                    pathSave = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+ UUID.randomUUID().toString()+"audio_record.3gp";
                    setupMediaRecorder();
                    try{
                        mediaRecorder.prepare();
                        mediaRecorder.start();
                    }  catch (IOException e){
                        e.printStackTrace();
                    }

                    btnPlay.setEnabled(false);
                    btnStop.setEnabled(false);

                    Toast.makeText(Main2Activity.this, "Recording...", Toast.LENGTH_SHORT).show();


                }

                else{

                    requestPermission();
                }
            }
        });


        btnStopRecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mediaRecorder.stop();
                btnStopRecord.setEnabled(false);
                btnPlay.setEnabled(true);
                btnRecord.setEnabled(true);
                btnStop.setEnabled(false);
            }
        });

        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                btnStop.setEnabled(true);
                btnStopRecord.setEnabled(false);
                btnRecord.setEnabled(false);

                mediaPlayer = new MediaPlayer();
                try{
                    mediaPlayer.setDataSource(pathSave);
                    mediaPlayer.prepare();
                } catch (IOException e){
                    e.printStackTrace();
                }

                mediaPlayer.start();
                Toast.makeText(Main2Activity.this, "Playing...", Toast.LENGTH_SHORT).show();
            }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                btnStopRecord.setEnabled(false);
                btnRecord.setEnabled(true);
                btnStop.setEnabled(false);
                btnPlay.setEnabled(true);

                if (mediaPlayer != null){

                    mediaPlayer.stop();
                    mediaPlayer.release();
                    setupMediaRecorder();
                }
            }
        });


    }

    private void setupMediaRecorder(){
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        mediaRecorder.setOutputFile(pathSave);
    }

    private void requestPermission() {
        ActivityCompat.requestPermissions(this, new  String[]{
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.RECORD_AUDIO
        } ,REQUEST_PERMISSION_CODE);

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode)
        {
            case REQUEST_PERMISSION_CODE:
            {
                if(grantResults.length>0 && grantResults[0]== PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText( this, "Permission Denied", Toast.LENGTH_SHORT).show();
                }
            }
            break;
        }
    }

    private boolean checkPermissionFromDevice(){
        int write_external_storage_result = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int record_audio_result = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
        return write_external_storage_result == PackageManager.PERMISSION_GRANTED &&
                record_audio_result == PackageManager.PERMISSION_GRANTED;

    }
2) 保存创建音频文件的目录并将其转换为矢量:

String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+UUID.randomUUID().toString()+"audio_record.3gp";

public byte[] convert(String path) throws IOException {

    FileInputStream fis = new FileInputStream(path);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] b = new byte[1024];

    for (int readNum; (readNum = fis.read(b)) != -1; ) {
        bos.write(b, 0, readNum);
    }

    byte[] bytes = bos.toByteArray();

    return bytes;

}
问题

生成输出:

生成:生成失败

AAPT错误:(1个错误)

Android资源链接失败

错误消息示例:(1)AAPT:C:\Users\cmorais.gradle\caches\transforms-2\files-2.1\cb634fe4b4d1fdfcd5255e485d30a0c1\material-1.0.0\res\anim-v21\design\u bottom\u sheet\u slide in.xml:17:找不到错误:资源整数/底部工作表\u slide\u持续时间(又名com.Example.appsom:integer/bottom\sheet\u slide\u slide\u持续时间)(2)C:\Users\cmorais.gradle\caches\transforms-2\files-2.1\cb634fe4b4d1fdfcd5255e485d30a0c1\material-1.0.0\res\anim-v21\design\u bottom\u sheet\u slide\u out.xml:17:错误:找不到资源整数/底部工作表\u slide\u持续时间(又名com.example.appsom:integer/bottom\sheet\u slide\slide\u持续时间)两天前的moraiscarolinav
(3)C:\Users\cmorais.gradle\caches\transforms-2\files-2.1\cb634fe4b4d1fdfcd5255e485d30a0c1\material-1.0.0\res\animator-v21\design\u appbar\u state\u list\u animator.xml:19:找不到属性状态可提升(又名com.example.appsom:state\u liftable)(4)C:\Users\cmorais.gradle\caches\transforms-2\files-2.1\cb634fe4b4d1fdfcd5255e485d30a0c1\material-1.0.0\res\animator-v21\design\u appbar\u state\u list\u animator.xml:19:找不到属性状态提升(也称为com.example.appsom:state\u lifted)项目有(20)错误消息,最后显示“未找到”

3) 我的主要活动XML文件(文本):



文件或资源名为com.example.appsom:integer/bottom\u sheet\u slide\u duration)。 在项目的\res\values文件夹中创建integers.xml文件。在文件中创建整数:

<resources>
<integer name="bottom_sheet_slide_duration">value</integer></resources>

价值

您可以共享您的xml文件吗?@JDevoloper如何在这里共享?您可以更新您的问题,我想您的问题在您的xml文件中。我的意思是你的日志里没有提到的文件。请检查@Muhammed答案。差不多是那么回事。您也可以修复从xml文件中删除这些值的问题。不要在注释部分发布代码、错误日志。评论的目的是要求澄清或建议对该职位的改进。也不要把一个问题作为答案。请不要这样做(按下面的按钮来标记你的问题),把问题写下来并发表。@Shashanth好的,我用错误评论编辑了我的文章。谢谢。这样做时,我收到一条消息:“无法解析符号‘值’”,正在搜索并替换com.android。支持:support-v4:+with com.android。支持:support-v4:27.1.0位于platform/android目录中。
<resources>
<integer name="bottom_sheet_slide_duration">value</integer></resources>