我是Android Studio和Java的新手,请耐心等待。
我正在创建一个应用程序,你可以用dart游戏保持分数。我有一个switch语句,单击该按钮。当按下回车按钮时,我希望它在使用一个参数(即输入)时转到另一个Java文件。显然我使用静态和非静态方法,这是错误的。我该如何解决这个问题?
这是我的第一个java文件,女巫是来自屏幕文件:
package com.example.jeroe.darts;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import com.example.jeroe.darts.Score;
public class MatchScreen extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_match_screen);
DefineEventHandlers();
}
public void onClick(View v) {
TextView InputTrue = (TextView) findViewById(R.id.TextviewInput);
TextView editTextScore = (TextView) findViewById(R.id.editTextScore);
switch (v.getId()) {
case R.id.TextViewInnerbull:
editTextScore.append("50");
break;
case R.id.TextViewOuterBull:
editTextScore.append("25");
break;
case R.id.TextViewClear:
editTextScore.setText("");
break;
case R.id.TextViewEnter:
Score.enter(editTextScore.getText());
// here i get an error:
//non-static method 'enter(charsequence)' cannot be referenced from a static context
}
}
public void DefineEventHandlers()
{
// declare textviews Player 1
TextView TextViewPL1Score = (TextView) findViewById(R.id.TextViewPL1Score);
TextView PL1Dart1 = (TextView) findViewById(R.id.PL1Dart1);
TextView PL1Dart2 = (TextView) findViewById(R.id.PL1Dart2);
TextView PL1Dart3 = (TextView) findViewById(R.id.PL1Dart3);
// declare textviews Player 2
TextView TextViewPL2Score = (TextView) findViewById(R.id.TextViewPL2Score);
TextView PL2Dart1 = (TextView) findViewById(R.id.PL2Dart1);
TextView PL2Dart2 = (TextView) findViewById(R.id.PL2Dart2);
TextView PL2Dart3 = (TextView) findViewById(R.id.PL2Dart3);
//T20, bulls
TextView TextViewOuterBull = (TextView) findViewById(R.id.TextViewOuterBull);
TextViewOuterBull.setOnClickListener(this);
TextView TextViewInnerBull = (TextView) findViewById(R.id.TextViewInnerbull);
TextViewInnerBull.setOnClickListener(this);
//Enter, backspace
TextView TextViewClear = (TextView) findViewById(R.id.TextViewClear);
TextViewClear.setOnClickListener(this);
TextView TextViewEnter = (TextView) findViewById(R.id.TextViewEnter);
TextViewEnter.setOnClickListener(this);
}
} //end of the file
然后我需要它去另一个名为score.java的文件。在这里,我希望它能保持得分和其他一些东西:
package com.example.jeroe.darts;
public class Score {
int PL1Score = 501;
boolean player1 = true;
public void enter(CharSequence input) {
int IntInput = InputConverter(input);
if (player1 == true) //de input is = player 1
{
// do something
}
}
public int InputConverter(CharSequence input) {
int Input = Integer.parseInt(input.toString());
return Input;
}
}
我该如何解决这个问题?
答案 0 :(得分:1)
//non-static method 'enter(charsequence)' cannot be referenced from a static context
这意味着你需要一个得分实例:
Score score = new Score();
score.enter(editTextScore.getText());
答案 1 :(得分:0)
如果你想"转到你的第二个java文件"你的意思是:你想根据你的课程分数来实例化一个新的对象。
如果你有这个对象,如Gavriel所述,你可以调用声明的方法。
静态变量或方法存在于类的上下文中,而不存在于对象实例的上下文中:例如,您可以定义一个静态字段,该字段计算所有创建的对象实例,并且您创建的每个对象都可以访问此静态字段并访问其内容。
类的成员变量只能在具体对象的上下文中访问,所有对象都可以使用静态字段。因此,使用静态和非静态方法都没有错,但您应该在正确的上下文中使用它们。
以简短的例子说明,它将变得更加清晰。
public class Example {
public static int instanceCounter = 0;
private String memberVariable = null;
public Example(String memberValue) {
Example.instanceCounter++;
this.memberVariable = memberValue;
}
public String getMemberVariable() {
return this.memberVariable;
}
public static void main(String[] args) {
System.out.println(Example.instanceCounter);
Example ex1 = new Example("value1");
Example ex2 = new Example("value2");
Example ex3 = new Example("value3");
System.out.println(ex1.getMemberVariable());
System.out.println(ex2.getMemberVariable());
System.out.println(ex3.getMemberVariable());
System.out.println(Example.instanceCounter);
}
}
如果执行该类,则会生成以下输出:
0
value1
value2
value3
3
正如您所看到的,这三个对象确实有三个具有相同名称的不同成员字段,并且每个对象可以具有相同字段的不同值。但静态字段instanceCounter只存在一次,可以在类上下文中访问,而根本不存在任何对象。