安卓中java调用另外一个类中方法的局部变量

6 篇文章 0 订阅
2 篇文章 0 订阅

安卓做视频流需要在mjpeg控件中调用数据解码,在manactivity类中的方法中回调到另外一个类中的方法,首先需要调用一个类变量,然后把局部变量的数据给到类变量,然后再另外一个类中实例化,因为java中局部变量是不能直接调用到另外一个类中的,会随着方法的结束而回收。这是变量的解释



类变量类型:

1.局部变量:在方法、构造方法、语句块中定义的变量。其声明和初始化在方法中实现,在方法结束后自动销毁

public class  ClassName{
    public void printNumber(){
        int a;
    }
    // 其他代码
}
2.成员变量:定义在类中,方法体之外。变量在创建对象时实例化。成员变量可被类中的方法、构造方法以及特定类的语句块访问。

public class  ClassName{
    int a;
    public void printNumber(){
        // 其他代码
    }
}
3.类变量:定义在类中,方法体之外,但必须要有 static 来声明变量类型。静态成员属于整个类,可通过对象名或类名来调用。

public class  ClassName{
    static int a;
    public void printNumber(){
        // 其他代码
    }
}

定义为类变量:

    //必须定义为类变量
    static public char[] mjpeg_stream;
    static public int mjpeg_stream_len;

然后在mainactivity方法中把局部变量拷贝出来:

public class mainactivity extends Activity { 
     public void onError(final int code, final char[] msg) {
    
                //Log.d("lsx test", "code: " + code + ", msg: " + Arrays.toString(msg));

                mjpeg_stream = new char[msg.length];
                System.arraycopy(msg,0,mjpeg_stream,0,msg.length);//把mjpeg流拷贝出来给解码
                mjpeg_stream_len = code;

LinearLayout_activity();
/*
                if(mjpeg_stream[0] == msg[0])
                {
                    Log.d("lsx test", "mjpeg_stream_len: " + mjpeg_stream_len + ", mjpeg_stream: " + Arrays.toString(mjpeg_stream));
                }
*/
                Message message = Message.obtain();
                message.what = code;
                message.obj = msg;
                //handler.sendMessage(message);
            }
        });
}
如果另一个类中的那个方法是私有的话,就不能直接调用到,如果是其他类型的话,如果是静态的(static)话,直接用类名可以调用到,如果是非静态的,就需要利用另一个类的实例(也就是用那个类生成的对象)来调用。如果是局部变量用法一样。

class A
{
    static int c;
    public static void a(){}
    public void b()
    {
        int a;
    }
}
public class B
{
    public static void main(String[] args)
    {
        A.a();//静态
        new A().b();//非静态
        new A().c;
    }
}

然后在B类中定义一个成员变量,实例化之后赋值即可:

public class b extends Activity {    
    public char[] getmjpeginstream;
    public int getmjpeginstreamlen;


    protected void onCreate(Bundle savedInstanceState) {
        getmjpeginstream = new MainActivity().mjpeg_stream;
        getmjpeginstreamlen = new MainActivity().mjpeg_stream_len;

        Log.d("lsx test", "getmjpeginstreamlen: " + getmjpeginstreamlen + ", getmjpeginstream: " + Arrays.toString(getmjpeginstream));
}

本人不是专业做安卓的,所以不是很熟练,有问题请交流留言,欢迎指出问题。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值