Reputation: 51
my MainActivity opens with all the widgets working, but when i select the button to open my second activity it fails to open and the app crashes. Eclipse is showing no errors
My Main Activity class:
public class MainActivity extends FragmentActivity {
private int dYear;
private int dMonth;
private int dDay;
private int rYear;
private int rMonth;
private int rDay;
static final int dDATE_DIALOG_ID = 0;
static final int rDATE_DIALOG_ID = 1;
private RadioButton buttonO = null;
private RadioButton buttonR = null;
private TableRow tr;
TextView txD, txR;
private Button btnDepart,btnReturn, btnSubmit,btnClose;
private Spinner noOfPassengersSpinner,departureSpinner,returnSpinner;
private CheckBox tandCCB;
final Context context = this;
private Bundle basket;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonO = (RadioButton) findViewById(R.id.radioO);
buttonR = (RadioButton) findViewById(R.id.radioR);
txD=(TextView)findViewById(R.id.tvDepartureDate);
txR=(TextView)findViewById(R.id.tvReturnDate);
btnDepart = (Button)findViewById(R.id.btnDepart);
btnReturn = (Button)findViewById(R.id.btnReturn);
tr = (TableRow)findViewById(R.id.tableRow5);
btnSubmit = (Button)findViewById(R.id.btnSubmit);
btnClose = (Button)findViewById(R.id.btnClose);
noOfPassengersSpinner = (Spinner)findViewById(R.id.noOfPassengersSpinner);
departureSpinner = (Spinner)findViewById(R.id.departureSpinner);
returnSpinner = (Spinner)findViewById(R.id.returnSpinner);
tandCCB = (CheckBox)findViewById(R.id.tandCCB);
final Calendar dC = Calendar.getInstance();
final Calendar rC = Calendar.getInstance();
dYear = dC.get(Calendar.YEAR);
dMonth = dC.get(Calendar.MONTH);
dDay = dC.get(Calendar.DAY_OF_MONTH);
rYear = rC.get(Calendar.YEAR);
rMonth = rC.get(Calendar.MONTH);
rDay = rC.get(Calendar.DAY_OF_MONTH);
updateDisplay();
tandCCB.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(isChecked){
btnSubmit.setEnabled(true);
}
else{
btnSubmit.setEnabled(false);
}
}
});
this.btnClose.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
finish();
System.exit(0);
}
});
this.btnSubmit.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
String depAir = departureSpinner.getSelectedItem().toString();
String desAir = returnSpinner.getSelectedItem().toString();
int numOfPass = Integer.parseInt(noOfPassengersSpinner.getSelectedItem().toString());
basket.putString("departureAir", depAir);
basket.putString("destenationAir", desAir);
basket.putInt("numOfPass", numOfPass);
basket.putString("depDate", txD.getText().toString());
String type = "";
if(buttonR.isChecked()){
String returnDate = txR.getText().toString();
basket.putString("returnDate", returnDate);
type = "Return";
}
else{
type = "Oneway";
}
basket.putString("type", type);
Intent intent = new Intent(context, Second.class);
intent.putExtras(basket);
startActivity(intent);
}
});
this.buttonO.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
tr.setVisibility(View.GONE);
}
});
this.buttonR.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
tr.setVisibility(View.VISIBLE);
}
});
this.btnDepart.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
showDialog(dDATE_DIALOG_ID);
}
});
this.btnReturn.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
showDialog(rDATE_DIALOG_ID);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private void updateDisplay() {
txD.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(dYear).append("-")
.append(dMonth + 1).append("-")
.append(dDay).append(" ")
);
txR.setText(
new StringBuilder()
.append(rYear).append("-")
.append(rMonth + 1).append("-")
.append(rDay).append(" ")
);
}
private DatePickerDialog.OnDateSetListener dDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
dYear = year;
dMonth = monthOfYear;
dDay = dayOfMonth;
updateDisplay();
}
};
private DatePickerDialog.OnDateSetListener rDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
rYear = year;
rMonth = monthOfYear;
rDay = dayOfMonth;
updateDisplay();
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case dDATE_DIALOG_ID:
return new DatePickerDialog(this,
dDateSetListener,
dYear, dMonth, dDay);
case rDATE_DIALOG_ID:
return new DatePickerDialog(this,
rDateSetListener,
rYear, dMonth, rDay);
}
return null;
}
}
My Second activity is:
public class Second extends Activity {
private TextView typeTv, departureTv,returnTv,departureDateTv,returnDateTv,noOfPassengersTv,tvReturnDateLbl;
private RadioButton buttonR = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
typeTv = (TextView)findViewById(R.id.typeTv);
departureTv = (TextView)findViewById(R.id.departureTv);
returnTv = (TextView)findViewById(R.id.returnTv);
departureDateTv= (TextView)findViewById(R.id.departureTv);
returnDateTv= (TextView)findViewById(R.id.returneDateTv);
noOfPassengersTv = (TextView)findViewById(R.id.noOfPassengersTv);
buttonR = (RadioButton) findViewById(R.id.radioR);
tvReturnDateLbl = (TextView)findViewById(R.id.tvReturnDateLbl);
Intent i = getIntent();//MAking an intent called i
Bundle basket = this.getIntent().getExtras();
String tTv = basket.getString("type");
String dTv = basket.getString("departureAir");
String rTv = basket.getString("destinationAir");
String dDTv = basket.getString("depDateTv");
int nOPTv = basket.getInt("numOfPass");
if(buttonR.isChecked()){
String rDTv = basket.getString("returnDate");
returnDateTv.setText(rDTv);
}
else{
returnDateTv.setVisibility(View.GONE);
tvReturnDateLbl.setVisibility(View.GONE);
}
typeTv.setText(tTv);
departureTv.setText(dTv);
returnTv.setText(rTv);
departureDateTv.setText(dDTv);
noOfPassengersTv.setText(""+nOPTv);
}
}
And Finally my Manifest file is:
<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=".Second"
android:label="@string/app_name">
</activity>
</application>
My LogCat
04-25 19:04:11.912: E/AndroidRuntime(999): FATAL EXCEPTION: main
04-25 19:04:11.912: E/AndroidRuntime(999): java.lang.NullPointerException
04-25 19:04:11.912: E/AndroidRuntime(999): at com.example.assignment2.MainActivity$5.onClick(MainActivity.java:121)
04-25 19:04:11.912: E/AndroidRuntime(999): at android.view.View.performClick(View.java:4084)
04-25 19:04:11.912: E/AndroidRuntime(999): at android.view.View$PerformClick.run(View.java:16966)
04-25 19:04:11.912: E/AndroidRuntime(999): at android.os.Handler.handleCallback(Handler.java:615)
04-25 19:04:11.912: E/AndroidRuntime(999): at android.os.Handler.dispatchMessage(Handler.java:92)
04-25 19:04:11.912: E/AndroidRuntime(999): at android.os.Looper.loop(Looper.java:137)
04-25 19:04:11.912: E/AndroidRuntime(999): at android.app.ActivityThread.main(ActivityThread.java:4745)
04-25 19:04:11.912: E/AndroidRuntime(999): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 19:04:11.912: E/AndroidRuntime(999): at java.lang.reflect.Method.invoke(Method.java:511)
04-25 19:04:11.912: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-25 19:04:11.912: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-25 19:04:11.912: E/AndroidRuntime(999): at dalvik.system.NativeStart.main(Native Method)
My new logcat
04-25 19:38:14.443: E/Trace(1155): error opening trace file: No such file or directory (2)
04-25 19:38:15.282: D/gralloc_goldfish(1155): Emulator without GPU emulation detected.
04-25 19:38:19.251: D/AndroidRuntime(1155): Shutting down VM
04-25 19:38:19.251: W/dalvikvm(1155): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
04-25 19:38:19.281: E/AndroidRuntime(1155): FATAL EXCEPTION: main
04-25 19:38:19.281: E/AndroidRuntime(1155): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.assignment2/com.example.assignment2.Second}: java.lang.NullPointerException
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.ActivityThread.access$600(ActivityThread.java:130)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.os.Handler.dispatchMessage(Handler.java:99)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.os.Looper.loop(Looper.java:137)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.ActivityThread.main(ActivityThread.java:4745)
04-25 19:38:19.281: E/AndroidRuntime(1155): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 19:38:19.281: E/AndroidRuntime(1155): at java.lang.reflect.Method.invoke(Method.java:511)
04-25 19:38:19.281: E/AndroidRuntime(1155): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-25 19:38:19.281: E/AndroidRuntime(1155): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-25 19:38:19.281: E/AndroidRuntime(1155): at dalvik.system.NativeStart.main(Native Method)
04-25 19:38:19.281: E/AndroidRuntime(1155): Caused by: java.lang.NullPointerException
04-25 19:38:19.281: E/AndroidRuntime(1155): at com.example.assignment2.Second.onCreate(Second.java:46)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.Activity.performCreate(Activity.java:5008)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
04-25 19:38:19.281: E/AndroidRuntime(1155): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
04-25 19:38:19.281: E/AndroidRuntime(1155): ... 11 more
04-25 19:38:19.441: D/dalvikvm(1155): GC_CONCURRENT freed 163K, 3% free 8303K/8519K, paused 79ms+112ms, total 315ms
Upvotes: 0
Views: 259
Reputation: 44571
I believe basket
is null
. You need to initialize it before callling put()
on it
Bundle basket = new Bundle();
Knowing how to read the logcat is imperative for debugging your work. Looking at the above output
04-25 19:04:11.912: E/AndroidRuntime(999): FATAL EXCEPTION: main
04-25 19:04:11.912: E/AndroidRuntime(999): java.lang.NullPointerException
04-25 19:04:11.912: E/AndroidRuntime(999): at
com.example.assignment2.MainActivity$5.onClick(MainActivity.java:121)
from here we see that there is a NPE
at line 121 of MainAcitivty
*Edit**
In Second
change the way you get your extras. Change
Intent i = getIntent();//MAking an intent called i
Bundle basket = this.getIntent().getExtras();
to
Intent i = getIntent();//MAking an intent called i
Bundle basket = i.getBundleExtra("basket");
Since you are putting the Bundle
into the Intent
instead of each extra
itself, you do it this way. If you had put each extra
in there then you would get a Bundle
the way you currently have it.
See this so answer (the second one) it may make it more clear.
In your first Activity
change
intent.putExtras(basket);
to
intent.putExtra("basket", basket);
Upvotes: 1