2012-01-10 80 views
0

你知道爲什麼讓我的應用程序意外關閉:的OnClick內的OnClick強制關閉

b2.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        setContentView(R.layout.id_weather); 
        //getting image form url 
        try { 
          ImageView i = (ImageView)findViewById(R.id.weather_icon); 
          Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("www.myimageurl.png").getContent()); 
          i.setImageBitmap(bitmap); 
         } catch (MalformedURLException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        Button b4=(Button)findViewById(R.id.button_weather10); 
        b4.setOnClickListener(new View.OnClickListener() { 
         public void onClick(View l) { 

          System.out.println("Yeah"); 
        } 
        }); 
      } 
      }); 

如果我註釋掉第二setOnClickListener,它的工作原理。它就像SetOnClick中的setOnClick不起作用。

這是我的logcat:

Uncaught handler: thread main exiting due to uncaught exception 
java.lang.NullPointerException 
at com......MyScreen$2.onClick(MyScreen.java:133) 

線133是我第二次在點擊

+0

您需要粘貼顯示崩潰的logcat。 – barry 2012-01-10 22:35:50

+0

請發佈堆棧跟蹤。 – kosa 2012-01-10 22:35:59

+0

難道是b4是空的? – Joru 2012-01-10 22:40:21

回答

2

我認爲,如果你打算從你不得不一clickListener的聲明中調用findViewById()用你的activity.this明確的,就像這樣:

Button b4=(Button)YourActivity.this.findViewById(R.id.button_weather10); 

否則,我認爲它會嘗試調用一個OnClickListener類,它不存在的findViewById()方法。

也似乎你必須嘗試多次調用setContentView()。你有

setContentView(R.layout.id_weather); 

在你的點擊監聽b2。但是如果你還沒有設置內容,那麼你就沒有按鈕可以點擊。如果您已經設置了一次內容,那麼第二次應該會失敗。一旦我想,你只能調用setContentView()。