2013-04-25 137 views
0

我的MainActivity打开时所有的小部件都在工作,但是当我选择按钮打开我的第二个活动时,它无法打开并且应用程序崩溃。 Eclipse中没有显示任何错误当我选择按钮时,我的第二个android活动无法启动

我的主要活动类:

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; 
     } 

    } 

我的第二项活动是:

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); 


} 

}

,最后我的清单文件:

<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> 

我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) 

我的新的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 
+2

logcat的,或者它从来没有发生过...... – WarrenFaith 2013-04-25 19:22:15

+0

什么是'MainActivity'的121线?这里有'null' – codeMagic 2013-04-25 19:26:21

+0

basket.putString(“departureAir”,depAir); – 2013-04-25 19:28:14

回答

1

我相信basketnull。你需要它

Bundle basket = new Bundle(); 

callling put()知道如何读的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) 

我们看到,在121线NPEMainAcitivty

*编辑**

Second改变你得到额外的方式。更改

Intent i = getIntent();//MAking an intent called i 
Bundle basket = this.getIntent().getExtras(); 

Intent i = getIntent();//MAking an intent called i 
Bundle basket = i.getBundleExtra("basket"); 

既然你把BundleIntent而不是每个extra的本身,你做这种方式。如果你已经把每个extra放在那里,那么你会得到一个Bundle你现在拥有它的方式。

See this so answer(第二个)它可能会更清楚。

在你的第一个Activity变化

intent.putExtras(basket); 

intent.putExtra("basket", basket); 
+0

没有仍然没有工作。我添加了Bundle basket = new Bundle();就在我的.put的 – 2013-04-25 19:32:51

+0

NPE仍然在同一行? – WarrenFaith 2013-04-25 19:33:50

+0

什么没有工作呢?你有不同的错误。这是什么导致第一个错误,但可能有其他问题 – codeMagic 2013-04-25 19:34:05

相关问题