user3146425
user3146425

Reputation: 23

Cannot resolve method findViewById("int")

I want to change text of my button but i am not able to do so, the android studio is showing me this: Cannot resolve method findViewById("int"). Here is my code

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

I am getting this error in this line:

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

Please help me as i am beginner to android and don't know much about. Thanks in advance

Upvotes: 0

Views: 3285

Answers (3)

Rebekah Zhang
Rebekah Zhang

Reputation: 1

You should find the name of your rootView, and use your rootView to call findViewById method. Below is an example:

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

Upvotes: 0

Hulk
Hulk

Reputation: 237

findViewById should be inside Activity

Upvotes: 2

zaPlayer
zaPlayer

Reputation: 862

becuse find view by id is method inside the activity class write ur thread object inside the activity and remmber if you wanna make some changes to the ui make sure to make it inside the runOnUiThread method check here

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

here's how you possiable could write your code

inside the on create method

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

Upvotes: 2

Related Questions