2015-08-16 75 views
1

我找不出错误发生的位置。这里是堆栈跟踪:NullPointerException。无法创建活动

08-16 18:00:36.455: E/AndroidRuntime(22834): FATAL EXCEPTION: main 
08-16 18:00:36.455: E/AndroidRuntime(22834): Process: org.example.calcu, PID: 22834 
08-16 18:00:36.455: E/AndroidRuntime(22834): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.example.calcu/org.example.calcu.Menu}: java.lang.NullPointerException 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.ActivityThread.access$800(ActivityThread.java:144) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.os.Handler.dispatchMessage(Handler.java:102) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.os.Looper.loop(Looper.java:136) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.ActivityThread.main(ActivityThread.java:5158) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at java.lang.reflect.Method.invokeNative(Native Method) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at java.lang.reflect.Method.invoke(Method.java:515) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at dalvik.system.NativeStart.main(Native Method) 
08-16 18:00:36.455: E/AndroidRuntime(22834): Caused by: java.lang.NullPointerException 
08-16 18:00:36.455: E/AndroidRuntime(22834): at org.example.calcu.Menu.onCreate(Menu.java:79) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.Activity.performCreate(Activity.java:6084) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
08-16 18:00:36.455: E/AndroidRuntime(22834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181) 
08-16 18:00:36.455: E/AndroidRuntime(22834): ... 12 more 

这是我尝试在我的MainActivity开始活动:

empty是按钮(相当长和空 - 它没有内容)。我刷我的手指留下来创建新的意图 - 菜单

empty = (Button) findViewById(R.id.empty); 
     empty.setOnTouchListener(new OnSwipeTouchListener(this){ 

      @Override 
       public void onSwipeLeft() { 
       Intent ent; 
       ent = new Intent(MainActivity.this, Menu.class); 
       startActivity(ent); 
      } 
     }); 

这是活动的,我尝试创建,菜单:

package org.example.calcu; 


import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.graphics.PorterDuff; 
import android.os.Bundle; 
import android.text.Layout; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 




public class Menu extends MainActivity{ 

    Button blueTheme; 
    View menu; 

    class OnSwipeTouchListener implements OnTouchListener{ 

     private final GestureDetector gestureDetector; 

      public OnSwipeTouchListener(Context context) { 
       gestureDetector = new GestureDetector(context, new GestureListener()); 
      } 

      public void onSwipeLeft() { 
      } 

      public void onSwipeRight() { 
      } 

      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 

      private final class GestureListener extends SimpleOnGestureListener { 

       private static final int SWIPE_DISTANCE_THRESHOLD = 100; 
       private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

       @Override 
       public boolean onDown(MotionEvent e) { 
        return true; 
       } 

       @Override 
       public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
        float distanceX = e2.getX() - e1.getX(); 
        float distanceY = e2.getY() - e1.getY(); 
        if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
         if (distanceX > 0) 
          onSwipeRight(); 
         else 
          onSwipeLeft(); 
         return true; 
        } 
        return false; 
       } 
      } 
     } 




    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("LOG", "menu opened!"); 
     setContentView(R.layout.menu); 
     menu = (View) findViewById(R.layout.menu); 
     menu.setOnTouchListener(new OnSwipeTouchListener(this){ /* this is line 79 */ 

      @Override 
      public void onSwipeRight(){ 
       setContentView(R.layout.activity_main); 
      } 


     }); 
     blueTheme = (Button) findViewById(R.id.blueTheme); 
     blueTheme.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 



      one.setBackgroundColor(Color.parseColor("#90CAF9"));  


      } 
     }); 



} 
} 

感谢您的帮助,对不起,我在编程非常初学者。

+0

添加XML布局 – hasan83

+0

只是curious-你为什么不使用抽屉式导航栏显示,而不是在一个整体的其他显示菜单活动? – DavidH

回答

3
menu = (View) findViewById(R.layout.menu); 

findViewById以id为参数而不是布局。

的可能应该是:

menu = (View) findViewById(R.id.menu); 

但是,当然你也应该有ID menu一个view在XML layout

要完成你的活动,并回到前一个:

menu.setOnTouchListener(new OnSwipeTouchListener(this){ 
    @Override public void onSwipeRight() 
    { 
     Menu.this.finish(); 
    } 
} 
+0

谢谢!它使它工作。有一个问题,我再次尝试通过滑动回到先前的视图,它会返回,但所有按钮都不会执行任何操作,只是一个屏幕停止工作,但没有崩溃。有任何想法吗? –

+0

你如何完成活动? – hasan83

+0

它的计算器应用程序。主要活动有所有界面,并且在菜单中,我正在考虑创建一些选项,例如颜色更改。现在我已经把它设置为只改变一个按钮的颜色。所以计算器的活动将在退出时完成。 –

相关问题