如何从Android中的其他类调用活动中调用方法?

时间:2013-07-05 00:01:43

标签: java android class android-activity nullpointerexception

我的项目中有2个类,第一个是扩展活动,另一个是扩展其他类。请帮助如何从其他类不活动的主要活动中调用方法?在这里我的代码:

  1. 扩展活动类

    public class Isign extends Activity {
    private static final String TAG         = "Sample::Activity";
    
    public Isign() {
        Log.i(TAG, "Instantiated new " + this.getClass());
    }   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        a = new IsignView(this);
    
    LinearLayout lv = new LinearLayout(this);
    lv.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    tv = new TextView(this);
    tv.setTextSize(20);
    tv.setText("RESULT : ");
    tv.setLayoutParams(textViewParams);
    lv.addView(tv);
    lv.addView(a);
    
    setContentView(lv);} 
    
    public void update_kom(String d){
        Log.i("asd", "asd");
        tv.setText("");
        tv.setText("RESULT : " + d);
    }
    
  2. 不延长活动类

    public class IsignView  extends IsignCvViewBase  {
    public IsignView(Context context) {
    super(context);
    
    try {
    
    } catch (IOException e) {
        e.printStackTrace();
        Log.e(TAG, "Failed to load cascade. Exception thrown: " + e);
    }
    }
    
  3. 顺便说一下,我用这种方式从主要活动中调用方法:

    new Isign().update_kom("bottle");
    

    我收到此错误LogCat:

    07-05 06:52:22.290: E/AndroidRuntime(2708): FATAL EXCEPTION: Thread-12
    07-05 06:52:22.290: E/AndroidRuntime(2708): java.lang.NullPointerException
    07-05 06:52:22.290: E/AndroidRuntime(2708): at 
    org.baharsan.isign.Isign.update_kom(Isign.java:86)     
    07-05 06:52:22.290: E/AndroidRuntime(2708): at 
    org.baharsan.isign.view.IsignView.processFrame(IsignView.java:353)
    07-05 06:52:22.290: E/AndroidRuntime(2708): at 
    org.baharsan.isign.cv.IsignCvViewBase.run(IsignCvViewBase.java:101)
    07-05 06:52:22.290: E/AndroidRuntime(2708): at 
    org.baharsan.isign.view.IsignView.run(IsignView.java:557)
    07-05 06:52:22.290: E/AndroidRuntime(2708): at  
    java.lang.Thread.run(Thread.java:1019)
    

    感谢您的回复,对不起,如果这个问题重复,我找不到类似我的问题的类似问题。其他问题只是告诉我如何从主要活动中调用其他类中的方法,但这个问题是相反的。 “如何在其他类的主要活动中调用方法?”

    非常感谢你:)。

3 个答案:

答案 0 :(得分:2)

虽然RSenApps'回答是有效的,让View只在某个活动中工作并不是最好的主意。而是在视图中声明一个接口。然后让Activity实现该接口并通过构造函数或setter将其提供给View。当您感兴趣的事件发生时,View可以在接口实例上调用该方法。

另外,请注意,您永远不能自己在活动上调用new,活动始终由框架管理。

答案 1 :(得分:1)

最简单的方法是将活动的引用传递给您的其他类而不是Context。例如

public IsignView(Isign activityReference) {
super((Context) activityReference);
activityReference.update_kom("bottle");
try {

} catch (IOException e) {
    e.printStackTrace();
    Log.e(TAG, "Failed to load cascade. Exception thrown: " + e);
}
}

答案 2 :(得分:0)

通过在“CallActivity”

中写下来调用“WantedActivity”
public class CallActivity extends Activity {
    //The Activity we wnt to call
    private WantedActivity stringname;

stringname用于处理WantedActivity。您也可以删除private