安卓做视频流需要在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));
}
本人不是专业做安卓的,所以不是很熟练,有问题请交流留言,欢迎指出问题。