Note that there are some explanatory texts on larger screens.

plurals
  1. POPublic class must be defined in its own file
    primarykey
    data
    text
    <p>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? </p> <p>activity_main.xml: </p> <pre><code>&lt;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" &gt; &lt;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" /&gt; &lt;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" /&gt; &lt;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" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>Planets.xml:</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" &gt; &lt;TextView android:id="@+id/planetTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/planet" /&gt; &lt;TextView android:id="@+id/textViewform2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" /&gt; &lt;RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" &gt; &lt;RadioButton android:id="@+id/mercuryRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="@string/mercury" /&gt; &lt;RadioButton android:id="@+id/venusRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/venus" /&gt; &lt;RadioButton android:id="@+id/earthRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/earth" /&gt; &lt;RadioButton android:id="@+id/marsRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="@string/mars" /&gt; &lt;RadioButton android:id="@+id/jupiterRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/jupiter" /&gt; &lt;RadioButton android:id="@+id/saturnRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/saturn" /&gt; &lt;RadioButton android:id="@+id/uranusRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="@string/uranus" /&gt; &lt;RadioButton android:id="@+id/neptuneRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/neptune" /&gt; &lt;RadioButton android:id="@+id/plutoRadio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/pluto" /&gt; &lt;/RadioGroup&gt; &lt;Button android:id="@+id/selectButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="buttonclick2" android:text="@string/select" /&gt; &lt;TextView android:id="@+id/textViewform2" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;/LinearLayout </code></pre> <p>JAVA: </p> <pre><code>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(); } } </code></pre> <p>Manifest:</p> <pre><code>&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.deitel.planetaryweight" android:versionCode="1" android:versionName="1.0" &gt; &lt;uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /&gt; &lt;application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" &gt; &lt;activity android:name=".MainActivity" android:label="@string/title_activity_main" &gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;/activity&gt; &lt;activity android:name="Planets" android:label="@string/title_planets"&gt;&lt;/activity&gt; &lt;/application&gt; &lt;/manifest&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload