簡體   English   中英

無法解析方法findViewById(“ int”)

[英]Cannot resolve method findViewById(“int”)

我想更改按鈕的文本,但無法執行操作,Android Studio向我顯示了此信息: Cannot resolve method findViewById("int") 這是我的代碼

package example.hudixts.app;
import android.media.AudioRecord;
import android.media.MediaRecorder.AudioSource;
import android.media.AudioFormat;
import android.widget.Button;



public class recorderThread extends Thread {
    public boolean recording;  //variable to start or stop recording
    public int frequency; //the public variable that contains the frequency value "heard", it is updated continually while the thread is running.
    public recorderThread () {
    }

    @Override
    public void run() {
        AudioRecord recorder;
        int numCrossing,p;
        short audioData[];
        int bufferSize;

        bufferSize=AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT)*3; //get the buffer size to use with this audio record

        recorder = new AudioRecord (AudioSource.MIC,8000,AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT,bufferSize); //instantiate the AudioRecorder

        recording=true; //variable to use start or stop recording
        audioData = new short [bufferSize]; //short array that pcm data is put into.


        while (recording) {  //loop while recording is needed
            if (recorder.getState()==android.media.AudioRecord.STATE_INITIALIZED) // check to see if the recorder has initialized yet.
                if (recorder.getRecordingState()==android.media.AudioRecord.RECORDSTATE_STOPPED)
                    recorder.startRecording();  //check to see if the Recorder has stopped or is not recording, and make it record.

                else {

                    recorder.read(audioData,0,bufferSize); //read the PCM audio data into the audioData array

                    //Now we need to decode the PCM data using the Zero Crossings Method

                    numCrossing=0; //initialize your number of zero crossings to 0
                    for (p=0;p<bufferSize/4;p+=4) {
                        if (audioData[p]>0 && audioData[p+1]<=0) numCrossing++;
                        if (audioData[p]<0 && audioData[p+1]>=0) numCrossing++;
                        if (audioData[p+1]>0 && audioData[p+2]<=0) numCrossing++;
                        if (audioData[p+1]<0 && audioData[p+2]>=0) numCrossing++;
                        if (audioData[p+2]>0 && audioData[p+3]<=0) numCrossing++;
                        if (audioData[p+2]<0 && audioData[p+3]>=0) numCrossing++;
                        if (audioData[p+3]>0 && audioData[p+4]<=0) numCrossing++;
                        if (audioData[p+3]<0 && audioData[p+4]>=0) numCrossing++;
                    }//for p

                    for (p=(bufferSize/4)*4;p<bufferSize-1;p++) {
                        if (audioData[p]>0 && audioData[p+1]<=0) numCrossing++;
                        if (audioData[p]<0 && audioData[p+1]>=0) numCrossing++;
                    }



                    frequency=(8000/bufferSize)*(numCrossing/2);  // Set the audio Frequency to half the number of zero crossings, times the number of samples our buffersize is per second.

                    Button p1_button = (Button)findViewById(R.id.submits);
                    p1_button.setText(Integer.toString(frequency));
                }//else recorder started

        } //while recording

        if (recorder.getState()==android.media.AudioRecord.RECORDSTATE_RECORDING) recorder.stop(); //stop the recorder before ending the thread
        recorder.release(); //release the recorders resources
        recorder=null; //set the recorder to be garbage collected.

    }//run

}//recorderThread

我在此行中收到此錯誤:

 Button p1_button = (Button)findViewById(R.id.submits);

請幫助我,因為我是android的初學者,所以對它的了解不多。 提前致謝

因為通過id查找視圖是活動類中的方法,所以請在活動類中寫入您的線程對象,如果想要對ui進行一些更改,請確保將其放在runOnUiThread方法中,請檢查這里

runOnUiThread(new Runnable(){
@Override
public void run(){
    // change UI elements here
}});

這是您可能的編寫代碼的方式

在on create方法中

Thread a=new Thread() {
public boolean recording;  //variable to start or stop recording
public int frequency; //the public variable that contains the frequency value "heard", it is updated continually while the thread is running.

@Override
public void run() {
    AudioRecord recorder;
    int numCrossing,p;
    short audioData[];
    int bufferSize;

    bufferSize=AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_MONO,
            AudioFormat.ENCODING_PCM_16BIT)*3; //get the buffer size to use with this audio record

    recorder = new AudioRecord (AudioSource.MIC,8000,AudioFormat.CHANNEL_CONFIGURATION_MONO,
            AudioFormat.ENCODING_PCM_16BIT,bufferSize); //instantiate the AudioRecorder

    recording=true; //variable to use start or stop recording
    audioData = new short [bufferSize]; //short array that pcm data is put into.


    while (recording) {  //loop while recording is needed
        if (recorder.getState()==android.media.AudioRecord.STATE_INITIALIZED) // check to see if the recorder has initialized yet.
            if (recorder.getRecordingState()==android.media.AudioRecord.RECORDSTATE_STOPPED)
                recorder.startRecording();  //check to see if the Recorder has stopped or is not recording, and make it record.

            else {

                recorder.read(audioData,0,bufferSize); //read the PCM audio data into the audioData array

                //Now we need to decode the PCM data using the Zero Crossings Method

                numCrossing=0; //initialize your number of zero crossings to 0
                for (p=0;p<bufferSize/4;p+=4) {
                    if (audioData[p]>0 && audioData[p+1]<=0) numCrossing++;
                    if (audioData[p]<0 && audioData[p+1]>=0) numCrossing++;
                    if (audioData[p+1]>0 && audioData[p+2]<=0) numCrossing++;
                    if (audioData[p+1]<0 && audioData[p+2]>=0) numCrossing++;
                    if (audioData[p+2]>0 && audioData[p+3]<=0) numCrossing++;
                    if (audioData[p+2]<0 && audioData[p+3]>=0) numCrossing++;
                    if (audioData[p+3]>0 && audioData[p+4]<=0) numCrossing++;
                    if (audioData[p+3]<0 && audioData[p+4]>=0) numCrossing++;
                }//for p

                for (p=(bufferSize/4)*4;p<bufferSize-1;p++) {
                    if (audioData[p]>0 && audioData[p+1]<=0) numCrossing++;
                    if (audioData[p]<0 && audioData[p+1]>=0) numCrossing++;
                }



                frequency=(8000/bufferSize)*(numCrossing/2);  // Set the audio Frequency to half the number of zero crossings, times the number of samples our buffersize is per second.

                Button p1_button = (Button)findViewById(R.id.submits);
                p1_button.setText(Integer.toString(frequency));
            }//else recorder started

    } //while recording

    if (recorder.getState()==android.media.AudioRecord.RECORDSTATE_RECORDING) recorder.stop(); //stop the recorder before ending the thread
    recorder.release(); //release the recorders resources
    recorder=null; //set the recorder to be garbage collected.

}//run}         a.start();

findViewById應該在Activity

您應該找到rootView的名稱,並使用rootView調用findViewById方法。 下面是一個示例:

View rootView = inflater.inflate(R.layout.fragment_main, container, false);
ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM