Reputation: 23
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
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
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