Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中从一个类到另一个类获取变量?_Java_Android - Fatal编程技术网

Java 如何在Android中从一个类到另一个类获取变量?

Java 如何在Android中从一个类到另一个类获取变量?,java,android,Java,Android,我正在写一个应用程序来记录通话并上传所有被记录的文件 我在获取路径文件名并将其上载到服务器时遇到问题 我想当1个文件记录成功后,它就会上传 我有两门课: 类录音机来记录通话 public class AudioRecorder { static String fileName; MediaRecorder mediaRecorder; public void start() { File directory = new File(fileName).g

我正在写一个应用程序来记录通话并上传所有被记录的文件

我在获取路径文件名并将其上载到服务器时遇到问题

我想当1个文件记录成功后,它就会上传

我有两门课: 类录音机来记录通话

public class AudioRecorder {

    static String fileName;

    MediaRecorder mediaRecorder;
    public void start() {
        File directory = new File(fileName).getParentFile();
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setOutputFile(fileName);
        mediaRecorder.prepare();
        mediaRecorder.start();
                }

    public String courseGet(String startDate) {
        return Environment.getExternalStorageDirectory().getAbsolutePath() + "/GhiAmCuocGoi/"
                + startDate + configPreferenceManager.getPathFormat();
    }
}
在这个类中,fileName变量是contain PATH to file record

这个类在传入和传出呼叫时获取事件。 当调用状态为end时,它将上载文件

如何将类Audiorecorder的变量fileName的值获取到下面类的fileToUploadPath变量

在本课程中:

TelephonyManager telManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);

telManager.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {

     if (state != pState) {
        if (state == TelephonyManager.CALL_STATE_OFFHOOK && callInfoPreferenceManager.getCallState()) { 
            Toast.makeText(
                    context,
                    callInfoPreferenceManager.getName() + " "
                            + callInfoPreferenceManager.getPhoneNumber()
                            + "\n" + "Start recording!!!", Toast.LENGTH_SHORT).show();

        } else if (state == TelephonyManager.CALL_STATE_IDLE && callInfoPreferenceManager.getCallState() == CALLING) {
            Toast.makeText(context, "Record success.", Toast.LENGTH_SHORT).show();

            // I WILL UPLOAD AT HERE. AFTER RECORD SUCCESS
            MultipartUploadRequest req = new MultipartUploadRequest(this, serverUrlString)
                .addFileToUpload(fileToUploadPath, paramNameString);
        }
    }
}, PhoneStateListener.LISTEN_CALL_STATE);

我们可以通过多种方式从一个对象访问另一个对象上的变量。这主要有两种方式

1为变量getFileName创建getter方法,并通过创建的对象进行访问

2如果变量是静态的,那么可以编写静态getter函数。 例如:公共静态字符串getVal

还有其他方法,如通过将变量定义为public、protected或default直接访问方法,但不推荐使用,因为它违反了OOP原则

更高级的方法是通过Refection。

AudioRecorder.fileName是访问文件名的最佳方法,因为fileName是类的静态成员。并将在类加载到内存中时加载

在这里,AudioRecorder是一个公共类,所以这个名为fileName的变量可以在项目范围内的任何地方访问

因此,AudioRecorder.fileName是一种更好的访问方式

 MultipartUploadRequest req = new MultipartUploadRequest(this, serverUrlString)
                .addFileToUpload(AudioRecorder.fileName, paramNameString);
    // File Name passed as a parameter. 

    /*You should also put a check wheather this variable contains any actual 
    FileName that exists in Phone Memory(Either Internal/External) or Not  ?? */
我正在使用录音机录音机=新录音机;但是在这个类中找不到audioRecorder.fileName。它是一个静态成员,所以不需要任何对象来访问特定的变量fileName。所以只要试一下我推荐给你的。静态成员变量作为单个实体在所有对象之间共享。因此,@Luna无论您使用audioRecorder.fileName还是audioRecorder.fileName,都会给您相同的结果。谢谢