2014-04-03 109 views
0

我有這個MainActivity,會立即崩潰我的應用程序。這是爲什麼發生?我嘗試用Google的參考示例中的Context:Context aContext = getApplicationContext();類型的對象將參數的「MainActivity.this」部分替換爲完全相同的結果。Toast對象崩潰應用程序

我在做什麼錯?

非常感謝。更新,以反映建議

package com.nactus.questionme; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private Button mMadridButton; 
    private Button mWrongButton; 
    private Toast aToast; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // target the buttons 
     mMadridButton = (Button) findViewById(R.string.button_madrid); 
     mWrongButton = (Button) findViewById(R.string.button_wrong); 

     // set event listeners 
     mMadridButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Context context = getApplicationContext(); 

       // my code goes here 
       aToast = Toast.makeText(context, "test", Toast.LENGTH_SHORT); 

       aToast.show(); 
      } 
     }); 

     mWrongButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Context context = getApplicationContext(); 

       // my code goes here 
       aToast = Toast.makeText(context, "test", Toast.LENGTH_SHORT); 

       aToast.show(); 
      } 
     }); 
    } 



} 

代碼:死機一樣

+0

出於好奇,它會崩潰馬上或者只有當你按下按鈕? –

+0

@ tf.alves,馬上 – Nactus

+0

好的,請在下面閱讀我的回答 –

回答

1

而不是

R.string.buttonWrong 

(參數findViewById)應該是:

R.id.buttonWrong 

導致其搜索R. java文件,其中關於用XML文件編寫的元素(按鈕,開關,佈局)的所有信息都是s tored。

+0

'aToast = Toast.makeText(MainActivity.this.getApplicationContext(),R.string.incorrect_toast,Toast.LENGTH_SHORT);'同樣確切的崩潰 – Nactus

+0

奇怪。那麼R.string.incorrect_toast可能有問題?嘗試把那裏的一些硬核像「文字」 – markubik

+0

代碼更新,以反映你的建議,相同的錯誤 – Nactus

0

您應該使用getApplicationContext()函數。

例如,

Context context = getApplicationContext(); 
aToast = Toast.makeText(context, R.string.incorrect_toast, Toast.LENGTH_SHORT); 
aToast.show(); 

this

0

您可以從logcat提供錯誤日誌。但我在這裏假設您的應用程序立即崩潰,而不是當您按下按鈕時。 如果是這樣的話,那麼它可能是一個NullPointerException,由於錯誤的id被送到findViewById方法。請檢查提供的id是否屬於activity_main佈局。 設置點擊偵聽器時mMadridButton或mWrongButton爲null。因此它崩潰。吐司部分似乎好,因爲它!

+0

[2014-04-03 13:36:25 - ddms] null java.nio。BufferOverflowException \t在java.nio.HeapByteBuffer.put(HeapByteBuffer.java:200) \t在com.android.ddmlib.JdwpPacket.movePacket(JdwpPacket.java:235) \t在com.android.ddmlib.Debugger.sendAndConsume( Debugger.java:347) \t在com.android.ddmlib.Client.forwardPacketToDebugger(Client.java:665) \t在com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:344) \t在com.android .ddmlib.MonitorThread.run(MonitorThread.java:263) – Nactus

+0

no logcat error – Nactus

+1

檢查在「設備」視圖中是否選擇了您正在執行測試的設備。還要執行一個「乾淨的項目」,以保證安全。你能用調試器啓動項目並檢查它失敗的位置嗎?您在上面發佈的logcat錯誤不適合您提供的代碼,它只是沒有意義:) –

0

不要使用此代碼

private Toast aToast; 
aToast = Toast.makeText(context, "test", Toast.LENGTH_SHORT); 
aToast.show(); 

而是用這個單行代碼

Toast.makeText(getBaseContext(),"test",Toast.LENGTH_SHORT).show(); 
+0

清理那個對象並添加了你的建議,得到了同樣的崩潰,我開始認爲這可能是一個硬件問題:S? – Nactus

+0

這段代碼工作正常 –

+1

構建不同的模擬器android虛擬設備管理器和測試你的應用程序在不同的模擬器...如果相同的問題有沒有那麼問題是在你的代碼 –