2016-10-05 6 views
1

Im Programm unten für einen Android-App in Android-Studios verwendet, wenn getPercent() aus der zweiten Klasse (Main2Activity) aufgerufen wird, es gibt immer 999 (Standardwert), und das,Ein Teil meines Codes wird nicht in Android-Studios ausgeführt?

ttper = .....;

Anweisung von der Hauptklasse in der OnClick() wird nie ausgeführt. Gibt es dafür einen bestimmten Grund? Können Sie bitte darauf hinweisen?

Dies ist die Haupttätigkeit,

public class MainActivity extends AppCompatActivity { 

float i1m,i2m,mm,atp,assp; 
float ttper=999; 
boolean b=false; 
EditText i1,i2,model,assignment,attendence; 
Button b1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final Context cont = this; 
    final Intent intent = new Intent(cont, Main2Activity.class); 

    b1=(Button)findViewById(R.id.button2); 
    b1.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      //try { 
      i1=(EditText)findViewById(R.id.int1); 
      i2=(EditText)findViewById(R.id.int2); 
      model=(EditText)findViewById(R.id.mod); 
      assignment=(EditText)findViewById(R.id.assign); 
      attendence=(EditText)findViewById(R.id.attend); 

      i1m = Float.parseFloat(String.valueOf(i1.getText())); 
      i2m = Float.parseFloat(i2.getText().toString()); 
      mm = Float.parseFloat(model.getText().toString()); 
      assp = Float.parseFloat(assignment.getText().toString()); 
      atp = Float.parseFloat(attendence.getText().toString()); 
      ttper = ((i1m/10) + (i2m/10) + ((mm/100) * 15) + (assp) + ((atp >= 75.0f) ? ((atp - 75)/5) : 0.0f)); 

      //setValues(); 
      startActivity(intent); 
      //} 
      //catch (Exception e) { 
       // Log.e("app crash",e.getMessage()); 
      //} 
     } 
    }); 
} 
/*void setValues() 
{ 
    /* i1m = Float.parseFloat(String.valueOf(i1.getText())); 
    i2m = Float.parseFloat(i2.getText().toString()); 
    mm = Float.parseFloat(model.getText().toString()); 
    assp = Float.parseFloat(assignment.getText().toString()); 
    atp = Float.parseFloat(attendence.getText().toString());*/ 
}/* 
float getPercent() 
{ 
     //float ttper=50.0f; 
     return ttper; 
} 
} 

Dies ist die zweite Aktivität,

public class Main2Activity extends AppCompatActivity { 

float tper=1.0f; 
String str; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 

     TextView v1 = (TextView) findViewById(R.id.textView11); 
     MainActivity m1 = new MainActivity(); 
     //m1.setValues(); 
     //try { 
      str = String.valueOf(m1.getPercent()) + "%"; 
      v1.setText(str); 
     //} 
    //catch (Exception e) { 
     // Log.e("app crash",e.getMessage()); 
    //} 
} 

} 
+0

vielleicht sollten Sie Zeug auskommentieren – Blackbelt

+1

Sie sollten nie 'new' verwenden, um eine Instanz einer Aktivitätsklasse zu erstellen –

Antwort

1

es kann nicht funktionieren. Wenn Sie new MainActivity() erstellen, lautet Ihre ttper999.

Sie sollten pass data between Activities auf diese Weise:

  1. Setzen Sie die neue berechnete ttper in Intent: intent.putExtra("ttper", ttper);

  2. Dann in MainActivity2 Verwendung getIntent().getFloatExtra("ttper", 999.0f);

+0

Bitte kennzeichnen Sie die Frage als ein Duplikat –

0

Sie haben eine Instanz, die eine variable MainActivity ttper hat. Sie ändern diesen Wert. Dann in einer anderen Klasse Main2Activity erstellen Sie eine neue Instanz von MainActivity und versuchen, diesen Wert zu erhalten, aber ttper hat den Standardwert, da dies eine neue Instanz ist und noch nicht geändert wurde.

Was Sie tun können, ist die Definition ttper als statisch:

static float ttper=999; 

Sie können sogar Ihre Funktion getPercent() als statisch definieren, so dass Sie den Wert nicht in eine neue Instanz dieser Klasse erstellen müssen erhalten . Sie würden einfach MainActivity.getPercent() aufrufen.

Weitere Informationen finden Sie unter: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Wie dem auch sei, diese der Weitergabe von Daten von einer Aktivität zur anderen nicht der richtige Weg ist. Sie sollten diese Richtlinien befolgen: https://developer.android.com/training/basics/firstapp/starting-activity.html

+0

hat eine neue Sache über statische von Ihnen gelernt! Ich kannte die Definition, wusste aber nicht, was ich genau mache. Vielen Dank! –

0

Sie sollten Extras auf Absichten verwenden um Daten zwischen Aktivitäten zu übergeben.

Verwandte Themen