2013-04-30 49 views
0

我試圖從一個活動(Second.class)獲取文本,並將其傳遞到另一個活動(Third.class)。我試圖得到的字符串是機場代碼的TextView。若沒有通過文本通過activites在android系統

這是一段代碼,我認爲這是造成問題的原因

this.btnD.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Intent intent = new Intent(context, Thrid.class); 


      tvTemp = (TextView)findViewById(R.id.tvReturn); 


      Bundle tb = new Bundle(); 

      String d = tvTemp.getText().toString(); 


      tb.putString("destenation", d); 

      intent.putExtra("basket", tb); 

      startActivity(intent); 
     } 

    }); 

我的第三類

destenationV=(TextView)findViewById(R.id.tvDes); 

    Intent i = getIntent();//MAking an intent called i 

    Bundle basket = i.getBundleExtra("basket"); 

    String desTv = basket.getString("destenation"); 

    if(desTv.toString() == "SNN (IRL)"){ 

     desTv = "IRELAND"; 
     destenationV.append(desTv); 
    } 
    else if(desTv.toString()=="EWR (USA)"){ 

     desTv = "UNITED STATES"; 
     destenationV.append(desTv); 
    } 

    else if(desTv.toString()=="LHR (GRB))"){ 

     desTv ="UNITED KINGDOM"; 
     destenationV.append(desTv); 
    } 

這是我的日誌貓當我運行我的應用程序

04-30 18:19:02.222: E/Trace(1102): error opening trace file: No such file or directory (2) 
04-30 18:19:03.082: D/gralloc_goldfish(1102): Emulator without GPU emulation detected. 
04-30 18:19:28.912: D/dalvikvm(1102): GC_CONCURRENT freed 123K, 3% free 8295K/8519K, paused 79ms+100ms, total 290ms 
04-30 18:19:31.622: D/AndroidRuntime(1102): Shutting down VM 
04-30 18:19:31.642: W/dalvikvm(1102): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
04-30 18:19:31.652: E/AndroidRuntime(1102): FATAL EXCEPTION: main 
04-30 18:19:31.652: E/AndroidRuntime(1102): java.lang.NullPointerException 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at com.example.assignment2.Second$3.onClick(Second.java:115) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at android.view.View.performClick(View.java:4084) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at android.view.View$PerformClick.run(View.java:16966) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at android.os.Handler.handleCallback(Handler.java:615) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at android.os.Looper.loop(Looper.java:137) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-30 18:19:31.652: E/AndroidRuntime(1102):  at dalvik.system.NativeStart.main(Native Method) 

Eclipse顯示沒有錯誤(其他則在logCat中)。在此先感謝

我完全二等

 public class Second extends Activity { 

    private TextView typeTv,   departureTv,returnTv,departureDateTv,returnDateTv,noOfPassengersTv,tvReturnDateLbl, tvTemp; 
private RadioButton buttonR = null; 
private CheckBox cCB; 
private Button btnD, btnB; 
final Context context = this; 


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.departureDateTv); 
    returnDateTv= (TextView)findViewById(R.id.returneDateTv); 
    noOfPassengersTv = (TextView)findViewById(R.id.noOfPassengersTv); 
    buttonR = (RadioButton) findViewById(R.id.radioR); 
    tvReturnDateLbl = (TextView)findViewById(R.id.tvReturnDateLbl); 
    cCB = (CheckBox)findViewById(R.id.correctCB); 
    btnD= (Button)findViewById(R.id.btnDecsion); 
    btnB= (Button)findViewById(R.id.btnBack); 

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



    String tTv = basket.getString("type"); 
    String dTv = basket.getString("departureAir"); 
    String rTv = basket.getString("destenationAir"); 
    String dDTv = basket.getString("depDate"); 
    int nOPTv = basket.getInt("numOfPass"); 
    String rDTv = basket.getString("returnDate"); 



    if(rDTv == ""||rDTv==null){ 

     returnDateTv.setVisibility(View.GONE); 
     tvReturnDateLbl.setVisibility(View.GONE); 
    } 
    else{ 
    returnDateTv.setText(rDTv); 
    } 

    cCB.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    { 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      if(isChecked){ 

       btnD.setEnabled(true); 

      } 
      else{ 

       btnD.setEnabled(false); 
      } 
     } 

    }); 

    typeTv.setText(tTv); 
    departureTv.setText(dTv); 
    returnTv.setText(rTv); 
    departureDateTv.setText(dDTv); 
    noOfPassengersTv.setText(""+nOPTv); 



    this.btnB.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Intent intent = new Intent(context, MainActivity.class); 



      startActivity(intent); 
     } 

    }); 

    this.btnD.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Intent intent = new Intent(context, Thrid.class); 


      tvTemp = (TextView)findViewById(R.id.tvReturn); 


      Bundle tb = new Bundle(); 

      String d = tvTemp.getText().toString(); 


      tb.putString("destenation", d); 

      intent.putExtra("basket", tb); 

      startActivity(intent); 
     } 

    }); 


} 

}

+0

'Second.java'的第115行是什麼?您正在訪問該行上的空對象。我的直覺是你訪問它時'tvTemp'爲空。 – 2013-04-30 18:26:59

+0

Second.java的第115行= String d = tvTemp.getText()。toString(); – 2013-04-30 18:28:29

+0

仍然不能工作 – 2013-04-30 18:49:04

回答

0
public void onClick(View v) 
    { 
     Intent intent = new Intent(context, Thrid.class); 

     tvTemp = (TextView)findViewById(R.id.tvReturn); 

     String d = tvTemp.getText().toString(); 

     intent.putExtra("destenation", d); 

     startActivity(intent); 
    } 

相反bundle.putString的設置調用putExtra在意圖值傳遞給下一個活動。並在下一個活動中調用getStringExtra(「destenation」)來檢索數據。

2

因此,看起來您正在使用的方法來獲取對您的TextView的引用正在返回null

tvTemp = (TextView)findViewById(R.id.tvReturn); 

之後,當您嘗試訪問您的TextView,這是null在這條線。

String d = tvTemp.getText().toString(); 

爲了解決這個問題:

  1. 確保R.id.tvReturn實際上是TextView的佈局xml文件的ID。
  2. 我建議你讓tvTemp您分配一個參考它使用onCreate(或onCreateViewfindViewById到一個全局變量,而不是你onClick方法。
0

堆棧跟蹤顯示,在15行空,這就是:

String d = tvTemp.getText().toString(); 

這似乎表明,前行

tvTemp = (TextView)findViewById(R.id.tvReturn); 

沒有找到一個TextView加載到tvTemp

+0

我上面編輯了我的問題,向您展示了我的完整第二課 – 2013-04-30 18:38:01

+0

請發佈您的XML佈局 - 有問題的行正在從佈局文件(R.layout.second)調用ID。 – 2013-05-01 01:03:37

0

tvReturn是在xml佈局文件中聲明的嗎?如果是這樣,你不需要通過捆綁與一個字符串的intent.putextra

字符串d = textview.getText()的toString()。 intente。putExtra( 「extra_name」,d); 。

在另一個類

捆B = getIntent()getExtras(); String a = b.getString(「extra_name」);