白云LDC 2022-10-01 17:41 采纳率: 40%
浏览 54

关于在不同#Java#之间传值的问题,如何解决?

问题遇到的现象和发生背景

我写好了一个方法,这个方法会被七八个活动页面(不知道这个词语是否描述正确,就是一个Java配一个layout那种)用到,且有些活动页面不止一次用到此方法。因此,我想着将这个方法封装起来,将来调用即可。但我只会将其写在一个Java内,然后在这一个Java内调用没有问题;但写到A的Java里,然后B的Java去调用就不会了。错误代码如下:

用代码块功能插入代码,请勿粘贴截图
//被封装的方法
public class FangWeiJ {
    double J, K;
    String I;
    public FangWeiJ(double x1, double y1, double x2, double y2) {
        if (y2 - y1 == 0 && x2 - x1 > 0) {
            J = 0;
        } else if (y2 - y1 == 0 && x2 - x1 < 0) {
            J = Math.PI;
        } else {
            J = (Math.PI * (1 - Math.abs(y2 - y1) / (y2 - y1) / 2)
                    - Math.atan((x2 - x1) / (y2 - y1)));
        }
        K = J * 180 / Math.PI;
        System.out.println(K + "1");
        Intent intent = new Intent();
        I = String.valueOf(K);
        intent.putExtra("F", I);
        System.out.println(I+ "2");
    }
}


//方法被调用的活动页面的Java
public class MainActivity extends AppCompatActivity {
    String I = "what?";
    FangWeiJ FWJ1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button1);
        button.setOnClickListener(v -> test(new Intent()));
    }
    //问题出在Intent,这是活动页面传值,而这只是一个java,不是活动页面。//另一个,接收方法,也许不能与发送方法合在一起?
    void test(@Nullable Intent data) {
        FWJ1 = new FangWeiJ(2, 2, 4, 4);
        System.out.println(I+ "3");
        assert data != null;
        I = data.getStringExtra("F");//这个F就像不是认识一样,乱写也不会报错。
        System.out.println(I+ "4");
        System.out.println("5");
        //Toast.makeText(this, I, Toast.LENGTH_LONG).show();
    }
}
运行结果及报错内容

F的值总是显示null。

我的解答思路和尝试过的方法

我认为问题出在Intent,这是活动页面传值,而这只是一个java,不是活动页面。//另一个,接收方法,也许不能与发送方法合在一起?
以下是封装在同一个Activity的方法,是成功的,不过其他Activity还得再写一遍……

public class MainActivity extends AppCompatActivity {
    String I,dist;
    double J, K,D;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button1);
        button.setOnClickListener(v -> test());
    }
    void test() {
        FangWeiJ(2, 2, 4, 4);        
        I=String.valueOf(K);
        dist = String.valueOf(D);
        System.out.println("方位角="+I);      
        System.out.println("距离=" + dist);
    } 
    public void FangWeiJ(double x1, double y1, double x2, double y2) {
        if (y2 - y1 == 0 && x2 - x1 > 0) {
            J = 0;
        } else if (y2 - y1 == 0 && x2 - x1 < 0) {
            J = Math.PI;
        } else {
            J = (Math.PI * (1 - Math.abs(y2 - y1) / (y2 - y1) / 2)
                    - Math.atan((x2 - x1) / (y2 - y1)));
        }
        K = J * 180 / Math.PI;
        D = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
    }
}
我想要达到的结果

获得名称为“F”的值(代码所示的正确值是45)。

  • 写回答

2条回答 默认 最新

  • liujichangdeboke 2022-10-08 11:18
    关注

    建议仔细看一下Android 基础 activity和indent 的关系,indent的使用,indent简单翻译为意图,可以理解为打开一个 activity时候使用,

    img


    你这里只是把值放进indent里面了,并没有指定关联那个Activity ,逻辑上就错误了。而且根据你的需求完全可以封装一个静态方法,全局调用。可以还是好好学习一下Java基础,函数的返回值、局部变量、全部变量什么的。。。。

    评论

报告相同问题?

问题事件

  • 修改了问题 10月2日
  • 修改了问题 10月2日
  • 修改了问题 10月2日
  • 创建了问题 10月1日

悬赏问题

  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit
  • ¥15 请问双层规划模型的上下层目标函数不一致,是如何保证迭代收敛性的
  • ¥30 微信小程序 前端页面内容搜索