无法从静态上下文引用,在其他类

时间:2017-05-18 15:11:24

标签: java android

我想将 MainActivity 的函数run_voice()放在我的班级 TypingDialogFragment 上,但它不起作用:

  

非静态方法'run_voice'不能从静态上下文引用

MainActivity.java

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    Home1=(ImageView)findViewById(R.id.home);
    Voice1=(ImageView)findViewById(R.id.voice);
    Scan1=(ImageView)findViewById(R.id.scan);
    frequence_text=(TextView)findViewById(R.id.frequence_text);
    command_text=(TextView)findViewById(R.id.command_text);
    gain_text=(TextView) findViewById(R.id.gain_text);
    body = (TextView)findViewById(R.id.body);
    fab = (FloatingActionButton) findViewById(R.id.fab);
    fab_frequence = (FloatingActionButton) findViewById(R.id.freq_value);
    fab_gain = (FloatingActionButton) findViewById(R.id.gain_value);
    send_voice = (ImageButton) findViewById(R.id.send_voice1);
    send_voice2 = (ImageView) findViewById(R.id.send_voice3);
    myChrono=(Chronometer) findViewById(R.id.chronometer);
    progressBar=(ProgressBar) findViewById(R.id.progressBar);

    body.setMovementMethod(new ScrollingMovementMethod());
    setSupportActionBar(toolbar);

    OUTPUT_FILE= Environment.getExternalStorageDirectory()+ "/audiorecord.wav";
    outFile=new File (OUTPUT_FILE);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            type = 1;
            showCmdLineDialog(type,run_voice);
        }
    });

    fab_frequence.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            type = 2;
            showCmdLineDialog(type,run_voice);
        }
    });

    fab_gain.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            type = 3;
            showCmdLineDialog(type,run_voice);
        }
    });
    display_mediaplayer_false();
    display_floatbutton_false();
    success1=0;

    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)){
        Toast.makeText(this, "FEATURE_BLUETOOTH NOT support", Toast.LENGTH_LONG).show();
        finish();
        return;
    }

    //using the well-known SPP UUID
    myUUID = UUID.fromString(UUID_STRING_WELL_KNOWN_SPP);

    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter == null) {
        Toast.makeText(this, "Bluetooth is not supported on this hardware platform", Toast.LENGTH_LONG).show();
        finish();
        return;
    }


    Home1.setOnClickListener(new View.OnClickListener() { 
        @Override
        public void onClick(View view) {
            if(success1==1)
            {
              display_mediaplayer_false();
              display_floatbutton_true();
            }
        }
    });

    Voice1.setOnClickListener(new View.OnClickListener() { 
        @Override
        public void onClick(View view) {
            if(success1==1) {
                display_floatbutton_false();
                display_mediaplayer_true();
            }
        }
    });

    Scan1.setOnClickListener(new View.OnClickListener() { 
        @Override
        public void onClick(View view) {
            if(success1==1) {
                display_floatbutton_false();
                display_mediaplayer_false();
            }
        }
    });

    send_voice.setOnClickListener(new View.OnClickListener() { 
        @Override
        public void onClick(View view) {
           run_voice(); // FUNCTION RUN VOICE
        }
    });

}

我的函数run_voice:

public void run_voice()
{
    try {
        if (color==0)
        {
            send_voice.setColorFilter(Color.RED); 
            beginRecording();                       
            progressBar.setVisibility(View.VISIBLE);
            myChrono.setBase(SystemClock.elapsedRealtime());
            myChrono.start();
            color1=1;
            run_voice=1;
        }
        if (color==1)
        {
            send_voice.setColorFilter(Color.BLACK); 
            progressBar.setVisibility(View.INVISIBLE);
            stopRecording();                       
            myChrono.stop();
            color1=0;
            run_voice=0;
        }
        color=color1;
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}

我想把这个函数放在这个类中:

 public static class TypingDialogFragment extends DialogFragment {

    EditText cmdLine;
    static MainActivity parentActivity;
    static ThreadConnected cmdThreadConnected;
    static int type1;
    static int run_voice1;

    static TypingDialogFragment newInstance(MainActivity parent, ThreadConnected thread, int type, int run_voice){
        type1=type;
        run_voice1=run_voice;
        parentActivity = parent;
        cmdThreadConnected = thread;
        TypingDialogFragment f = new TypingDialogFragment();
        return f;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        getDialog().setTitle("Cmd Line");
        getDialog().setCanceledOnTouchOutside(false);
        View typingDialogView = inflater.inflate(R.layout.typing_layout, container, false);

        cmdLine = (EditText)typingDialogView.findViewById(R.id.cmdline);
        ImageView imgCleaarCmd = (ImageView)typingDialogView.findViewById(R.id.clearcmd);

        imgCleaarCmd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cmdLine.setText("");
            }
        });

       ImageButton send_voice=(ImageButton)getActivity().findViewById(R.id.send_voice1);
        send_voice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                byte[] NewLine = "\n".getBytes();
                byte[] bytesToSend="pkill -f receiverfm.py".getBytes();
                byte[] bytesToSend2="./emetteur.py".getBytes();
                byte[] bytesToSend3="pkill -f emetteur.py".getBytes();
                byte[] bytesToSend4="./receiverfm.py".getBytes();

                if (run_voice1==0)
                {
                    cmdThreadConnected.write(bytesToSend);
                    cmdThreadConnected.write(NewLine);
                    cmdThreadConnected.write(bytesToSend2);
                }

                if (run_voice1==1)
                {
                    cmdThreadConnected.write(bytesToSend3);
                    cmdThreadConnected.write(NewLine);
                    cmdThreadConnected.write(bytesToSend4);
                }
                cmdThreadConnected.write(NewLine);
            }
        });

        Button btnEnter = (Button)typingDialogView.findViewById(R.id.enter);
        btnEnter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(cmdThreadConnected!=null){

                    byte[] memory_freq="100.0".getBytes();

                    if (type1==1)
                    {
                        byte[] bytesToSend = cmdLine.getText().toString().getBytes();
                        cmdThreadConnected.write(bytesToSend);
                        byte[] NewLine = "\n".getBytes();
                        cmdThreadConnected.write(NewLine);
                    }

                    if (type1==2)
                    {
                        byte[] byteToSend_freq = "./receiverfm.py --freq ".getBytes();
                        byte[] bytesToSend = cmdLine.getText().toString().getBytes();
                        memory_freq=bytesToSend;
                        cmdThreadConnected.write(byteToSend_freq);
                        cmdThreadConnected.write(bytesToSend);
                        byte[] NewLine = "\n".getBytes();
                        cmdThreadConnected.write(NewLine);
                    }

                    if (type1==3)
                    {
                        byte[] byteToSend_gain="./receiverfm.py --freq ".getBytes();
                        cmdThreadConnected.write(byteToSend_gain);
                        cmdThreadConnected.write(memory_freq);
                        byte[] byteToSend_gain2=" --".getBytes();
                        byte[] bytesToSend = cmdLine.getText().toString().getBytes();
                        cmdThreadConnected.write(byteToSend_gain2);
                        cmdThreadConnected.write(bytesToSend);
                        byte[] NewLine = "\n".getBytes();
                        cmdThreadConnected.write(NewLine);
                    }
                }
            }
        });

        Button btnDismiss = (Button)typingDialogView.findViewById(R.id.dismiss);
        btnDismiss.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });

        Button btnClear = (Button)typingDialogView.findViewById(R.id.clear);
        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                body.setText("");
            }
        });
        return typingDialogView;
    }
}

0 个答案:

没有答案