我写好了一个方法,这个方法会被七八个活动页面(不知道这个词语是否描述正确,就是一个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)。
建议仔细看一下Android 基础 activity和indent 的关系,indent的使用,indent简单翻译为意图,可以理解为打开一个 activity时候使用,
你这个变量范围不了解,局部变量,全局变量