如何在另一项活动中调用方法

时间:2016-03-25 19:46:41

标签: java android

我应该将一个方法从一个活动调用到另一个活动。我的第一课是:

public class firstclass extends Activity {
    public String Kind(){
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    boolean Key = preferences.getBoolean("Key", true);
    if(Key){
        name="you";
    }
    else{
        name="me";
    }
    return name;
    }
}

第二类是:

public class secondclass extends Activity {
    public void take(String token, int transactionId) {
        firstclass first = new firstclass(); //error in this class
        first.Kind();
   }
}

我的错误是:

03-25 19:05:39.082    5421-5487/com.example.com E/AndroidRuntime﹕ FATAL          EXCEPTION: pool-5-thread-1
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:197)
        at android.os.Handler.<init>(Handler.java:111)
        at android.app.Activity.<init>(Activity.java:759)
        at com.example.com.firstclass<init>(firstclass.java:17)
        at com.example.com.secondclass(secondclass.java:157)

5 个答案:

答案 0 :(得分:0)

简而言之:你不应该。创建一个单独的(单例)类来处理两个活动都可以访问的kind()逻辑。

答案 1 :(得分:0)

如果您需要在活动之间共享代码,则应将其导出到Helper类。

示例:

public class KindUtils {
    public static String Kind(Context context){
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    boolean Key = preferences.getBoolean("Key", true);
    if(Key){
        name="you";
    }
    else{
        name="me";
    }
    return name;
    }
}

现在,您可以在两个活动中致电KindUtils.Kind(this)

答案 2 :(得分:0)

这不是你怎么做的。让我根据我的知识纠正你的代码。

  1. 始终确保类名称应以大写字母的java类命名约定
  2. 开头
  3. 始终使用驼峰套管作为方法名称,以小型大写字母开头。
  4. 您不能将关键字new用于扩展活动的类。
  5. 现在,您如何从某些活动中访问其他活动的方法

    ((Firstclass)getActivity()).kind;
    

    这就是你如何从android中的其他类访问该方法。

    public class Firstclass extends Activity {
        public String kind(){
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        boolean Key = preferences.getBoolean("Key", true);
        if(Key){
            name="you";
        }
        else{
            name="me";
        }
        return name;
        }
    }
    

    在第二课你会做

    public class Secondclass extends Activity {
        public void take(String token, int transactionId) {
            String str= ((Firstclass)getActivity()).kind;
       }
    }
    

    希望它会有所帮助

答案 3 :(得分:0)

首先,当您从非UI线程调用UI(用户界面)方法时,会出现looper错误。在这种情况下,因为第二个活动没有作为意图启动,所以你启动它就会出现新的firstClass()坏事。Activitys有生命周期回调。 onCreate将引用传递给应该绘制的项目,通常至少是对布局setContentView(R.layout.activity_main)的引用; onStart是开始绘制。请记住Android支持许多屏幕尺寸,并且必须询问您想要放入活动的内容,有多少,android测量和数字如何显示然后调用onstart来显示它等等。主要是将Activity作为意图启动并阅读链接。在清单活动块中,您有Launcher,这意味着在显示屏上放置一个图标,以便在单击图标时启动活动。将活动作为意图开始的特殊方式。

答案 4 :(得分:0)

您只是不像在Java中那样在Android中实例化Activities的实例。您应该创建Intents并致电startActivity()。为了使您的逻辑工作,我建议您使用BroadcastReceivers