Public class must be defined in its own file

匿名 (未验证) 提交于 2019-12-03 10:10:24

问题:

I am trying to use two views in one application to come up with the user's planetary weight. After rewriting the java several times, I finally have it working... mostly, but on the public class Planets it tells me "The public type planets must be defined in its own file." I went into the manifest and made an activity for it, but that didn't help anything. Planets is already the name of one of my xml files. How do I make the public type into its own file?

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" >  <TextView     android:id="@+id/askwtTextView"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignParentLeft="true"     android:layout_alignParentTop="true"     android:layout_marginLeft="17dp"     android:layout_marginTop="19dp"     android:text="@string/askwt" />  <EditText     android:id="@+id/inputwtEditText"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignLeft="@+id/askwtTextView"     android:layout_below="@+id/askwtTextView"     android:layout_marginTop="26dp"     android:ems="10"     android:inputType="numberDecimal" />  <Button     android:id="@+id/enterButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignLeft="@+id/inputwtEditText"     android:layout_below="@+id/inputwtEditText"     android:layout_marginTop="38dp"     android:onClick="buttonclick"     android:text="@string/enter" />  </RelativeLayout> 

Planets.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >  <TextView     android:id="@+id/planetTextView"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="@string/planet" />  <TextView     android:id="@+id/textViewform2"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="" />  <RadioGroup     android:id="@+id/radioGroup1"     android:layout_width="wrap_content"     android:layout_height="wrap_content" >      <RadioButton         android:id="@+id/mercuryRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:checked="true"         android:text="@string/mercury" />      <RadioButton         android:id="@+id/venusRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/venus" />      <RadioButton         android:id="@+id/earthRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/earth" />      <RadioButton         android:id="@+id/marsRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:checked="true"         android:text="@string/mars" />      <RadioButton         android:id="@+id/jupiterRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/jupiter" />      <RadioButton         android:id="@+id/saturnRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/saturn" />      <RadioButton         android:id="@+id/uranusRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:checked="true"         android:text="@string/uranus" />      <RadioButton         android:id="@+id/neptuneRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/neptune" />      <RadioButton         android:id="@+id/plutoRadio"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/pluto" /> </RadioGroup>   <Button     android:id="@+id/selectButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:onClick="buttonclick2"     android:text="@string/select" />  <TextView     android:id="@+id/textViewform2"     android:layout_width="wrap_content"     android:layout_height="wrap_content"      />  </LinearLayout 

JAVA:

package com.deitel.planetaryweight;  import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.widget.*; import android.view.View; import android.view.Menu; import android.widget.Button; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.EditText; import android.widget.TextView; import java.text.DecimalFormat;  public class MainActivity extends Activity {  /* You should get used to declaring everything with the correct visibility.  Good  practice is to make everything private and use public mutator methods */ //Global variable private double weight; private Button enter;  // creates a button   // Views private EditText wtEntry; private TextView txtForm2;  @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);      //Start with first screen     setContentView(R.layout.activity_main);      enter = (Button) findViewById(R.id.enterButton);      //creates an editext and assigns the resource id of the xml edittext.     wtEntry = (EditText)findViewById(R.id.inputwtEditText);     txtForm2 = (TextView)findViewById(R.id.textViewform2); } // Button clicks shouldn't do anything but perform clicky actions. Leave field initialization, view creation, etc to the Activity. //buttonclick for form 1 public void buttonclick(View view){     //Receives the input from the edittext, converts it to a double (number).     weight = Double.parseDouble(wtEntry.getText().toString());      TextView t2 = null; //change the value of the textview on screen 2 to the calculation value    t2.setText(Double.toString(weight));     // If you want a new layout, it's best to start a new activity.    // It looks like you want to get information back, so use startActivityForResult().    // setContentView(R.layout.planets);    Intent dataIntent = new Intent(this, Planets.class);    dataIntent.putExtra("com.deitel.identifier.DATA_WEIGHT", weight);    startActivityForResult(dataIntent, Activity.RESULT_OK); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {     super.onActivityResult(requestCode, resultCode, data);      // Check that the resultCode is the same as we started the activity with     if(resultCode == Activity.RESULT_OK){         // get the double from the Intent, using the same string name (package  prefixed)         // or a default value if it didn't get set.         double resultWeight =  data.getDoubleExtra("com.deitel.identifier.RESULT_WEIGHT", 0.0);          // Now do something with resultWeight     } } } // PlanetChooser.class public class Planets extends Activity { // constants, usually denoted by uppercase and declared static and final public static final double MERCURYFORCE = 0.38;  public static final double VENUSFORCE = 0.91;  public static final double EARTHFORCE = 1.00;  public static final double MARSFORCE = 0.38;  public static final double JUPITERFORCE = 2.34;  public static final double SATURNFORCE = 1.06;  public static final double URANUSFORCE = 0.92; public static final double NEPTUNEFORCE = 1.19; public static final double PLUTOFORCE = 0.06;  private RadioButton mercury, venus, earth, mars, jupiter, saturn, uranus, neptune, pluto;  // No need to use the Double object as opposed to the primitive unless you have good reason private double mercurypf, venuspf, earthpf, marspf, jupiterpf, saturnpf, uranuspf,  neptunepf, plutopf, weight;  // One variable will suffice, it seems. private double resultForce;  public void onCreate(Bundle s){     super.onCreate(s);     setContentView(R.layout.planets);      mercury = (RadioButton) findViewById(R.id.mercuryRadio);     venus = (RadioButton) findViewById(R.id.venusRadio);     earth = (RadioButton) findViewById(R.id.earthRadio);                 mars = (RadioButton) findViewById(R.id.marsRadio);     jupiter = (RadioButton) findViewById(R.id.jupiterRadio);     saturn = (RadioButton) findViewById(R.id.saturnRadio);     uranus = (RadioButton) findViewById(R.id.uranusRadio);     neptune = (RadioButton) findViewById(R.id.neptuneRadio);     pluto = (RadioButton) findViewById(R.id.plutoRadio); } public void buttonclick2(View view){     /*     It looks to me here you're looking to see which box is checked, and set a value  based on      that planet.  Since instance variables (in this case mercurypf, jupiterpf, etc) are  initialized     to the default value (0), there's no need to set them manually.     */      // Code used to determine which planet RadioButton is checked:     if(mercury.isChecked())    {         resultForce = MERCURYFORCE * weight;     }     if(venus.isChecked()){         resultForce = VENUSFORCE * weight;     }     if(earth.isChecked()){         resultForce = EARTHFORCE * weight;     }     if(mars.isChecked()){         resultForce = MARSFORCE * weight;     }     if(jupiter.isChecked()){         resultForce =JUPITERFORCE * weight;     }     if(saturn.isChecked()){         resultForce = SATURNFORCE * weight;     }     if(uranus.isChecked()){         resultForce = URANUSFORCE * weight;     }     if(neptune.isChecked()){         resultForce = NEPTUNEFORCE * weight;     }     if(pluto.isChecked()){         resultForce = PLUTOFORCE * weight;     }     // Create a new data Intent to pass back to the calling activity, set the result  code,      // and manually finish() this activity.     Intent dataIntent = new Intent(this, null);     dataIntent.getDoubleExtra("com.deitel.identifier.RESULT_DATA", resultForce);     setResult(Activity.RESULT_OK, dataIntent);     finish(); } } 

Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.deitel.planetaryweight" android:versionCode="1" android:versionName="1.0" >  <uses-sdk     android:minSdkVersion="8"     android:targetSdkVersion="15" />  <application     android:icon="@drawable/ic_launcher"     android:label="@string/app_name"     android:theme="@style/AppTheme" >     <activity         android:name=".MainActivity"         android:label="@string/title_activity_main" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />              <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity>     <activity android:name="Planets" android:label="@string/title_planets"></activity> </application>  </manifest> 

回答1:

Your Java file is named MainActivity.java (the name of the public class it defines). Remove the Planets class from it, and put that class into a Planets.java file. That's pretty much just how Java wants it to be.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!