我有一个主要类," A类":
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mView = new AppGLSurfaceView(this); <------- I am creating
}
// Log <--------------------------------------- our log function
public void LogInfo(String message) {
android.util.Log.i("MyLogTag", "Message:" + message);
}
}
A类包含此类的对象:
class AppGLSurfaceView extends GLSurfaceView {
public AppGLSurfaceView(Context context) {
super(context);
mContext = context;
}
public boolean onTouchEvent(final MotionEvent event) {
mContext.LogInfo ("onTouchEvent"); <--------------- FAIL
return false;
}
Context mContext;
}
关闭,看起来MyActivity正在将自己的引用传递给第二类,mView = new AppGLSurfaceView(this)正在传递。 &#34;这&#34;是对象引用,对吗?
我通过&#34; mContext = context;&#34;
将B类中的对象引用存储在变量中如何调用LogInfo方法?
(我很少使用Java,所以如果它不是方法而是一个函数,请简单地正确地告诉我,我确实想知道Java术语。)
答案 0 :(得分:3)
LogInfo(....)
是MyActivity
类的一种方法,您试图调用Context
对象,需要强制转换mContext
才能执行此操作,例如:((MyActivity)mContext).LogInfo(....)
答案 1 :(得分:1)
由于您似乎正在将类String url="http://localhost:$port/applicant/{id}/status?blacklistingFlag&reason"
map.put("id", "23")
map.put("blacklistingFlag","0")
map.put("reason","no reason")
restTemplate.exchange(url, HttpMethod.PUT, null, null, map)
ResponseEntity<ResponseWrapper<User>> entity=restTemplate.put(url,ResponseWrapper.class , map)
then:
entity.statusCode == HttpStatus.OK
entity!=null
的实例传递给类MyActivity
的构造函数,因此可以将AppGLSurfaceView
的实例上的方法调用为:
MyActivity
在旁注中,您应该使用camel case来处理Java中的方法(((MyActivity)mContext) .LogInfo()
而不是logInfo
)。此外,您不需要声明方法静态,因为您希望在包含对象类的当前实例中调用方法。
答案 2 :(得分:0)
上下文不是MainActivity的对象,要使用该函数创建其对象或在MainActivity中将该函数设置为静态
public static void LogInfo(String message) {
android.util.Log.i("MyLogTag", "Message:" + message);
}
然后在你的A类中使用这样的
MainActivity.LogInfo ("onTouchEvent");
答案 3 :(得分:0)
您可以将AppGLSurfaceView
的构造函数更改为
class AppGLSurfaceView extends GLSurfaceView {
MyActivity myActivity;
public AppGLSurfaceView(MyActivity myActivity) {
super(myActivity);
this.myActivity = myActivity
}
public boolean onTouchEvent(final MotionEvent event) {
myActivity.LogInfo ("onTouchEvent");
return false;
}
}
这会引入MyActivity
的依赖关系,因此您无法再使用任何AppGLSurfaceView
创建Context
。也许你想引入一个日志记录接口。