2015-05-30 30 views
0

我想從活動調用一個方法到另一個活動,但我給出了空指針異常。空指針例外定義來自其他活動的方法

SidebarClass.java

public class SidebarClass extends Activity { 

private DrawerLayout mDrawerLayout; 
private ListView mDrawerList; 

public void Sidebar(final Context c) { 

    MyAdapter adapter = new MyAdapter(c, generateData()); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.listview); 
    mDrawerList.setAdapter(adapter); 
    mDrawerList 
      .setOnItemClickListener(new AdapterView.OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, 
         android.view.View view, int position, long id) { 

        switch (position) { 

        case 1: 
         Intent i1 = new Intent(c, Map.class); 
         startActivity(i1); 
         break; 
        case 2: 
         Intent i2 = new Intent(c, 
           Basket.class); 
         startActivity(i2); 
         break; 
        } 
       } 
      }); 
} 

private ArrayList<Model> generateData() { 
    ArrayList<Model> models = new ArrayList<Model>(); 
    models.add(new Model("TimiT ")); 

    models.add(new Model(R.drawable.home, "home", 1)); 
    models.add(new Model(R.drawable.basket, "basket", 2)); 

    return models; 
} 

} 

MainActivity.java

公共類MainActivity延伸活動實現OnClickListener {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.activity_main); 
    SidebarClass side = new SidebarClass(); 
    side.Sidebar(getBaseContext()); 

    } 
} 

logcat的

05-30 13:30:29.897: E/AndroidRuntime(6850): FATAL EXCEPTION: main 
    05-30 13:30:29.897: E/AndroidRuntime(6850): java.lang.RuntimeException: 
    Unable to start activity 
    ComponentInfo{com.example.timittest/com.example.timittest.MainActivity}: 
    java.lang.NullPointerException 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.app.ActivityThread.access$600(ActivityThread.java:141) 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.os.Handler.dispatchMessage(Handler.java:99) 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.os.Looper.loop(Looper.java:137) 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.app.ActivityThread.main(ActivityThread.java:5041) 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    java.lang.reflect.Method.invokeNative(Native Method) 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    java.lang.reflect.Method.invoke(Method.java:511) 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:79 
3) 
05-30 13:30:29.897: E/AndroidRuntime(6850):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-30 13:30:29.897: E/AndroidRuntime(6850):  at dalvik.system.NativeStart.main(Native Method) 
05-30 13:30:29.897: E/AndroidRuntime(6850): Caused by: java.lang.NullPointerException 

    05-30 13:30:29.897: E/AndroidRuntime(6850):  at 
    android.app.Activity.findViewById(Activity.java:1839) 

    05-30 13:30:29.897: E/AndroidRuntime(6850): at 
    com.example.tools.SidebarClass.Sidebar(SidebarClass.java:29) 

    05-30 13:30:29.897: E/AndroidRuntime(6850): at 

    com.example.timittest.MainActivity.onCreate(MainActivity.java:42) 

    05-30 13:30:29.897: E/AndroidRuntime(6850): at 

    android.app.Activity.performCreate(Activity.java:5104) 

    05-30 13:30:29.897: E/AndroidRuntime(6850): at 
    android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    05-30 13:30:29.897: E/AndroidRuntime(6850): at 
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
+1

添加錯誤日誌。 –

+1

**不要手動實例化活動。使用startActivity(新的意圖(this,SideBarClass.class)); ** – EpicPandaForce

+0

雖然技術上你需要閱讀如何使用'片段'。 – EpicPandaForce

回答

1
SidebarClass side = new SidebarClass(); 
side.Sidebar(getBaseContext()); 

這是一個非常糟糕的主意。你永遠不應該手動實例化一個活動。看來你的設計有一些問題。最有可能的是,您的SidebarClass應該而不是延伸Activity。只要刪除這部分。我還建議你做一些研究以找到建立DrawerLayout的建議做法。

即便如此,潛在的問題可能仍然會在您的代碼中。注意你的logcat以下行:

at 

com.example.tools.Sid​​ebarClass.Sid​​ebar(SidebarClass.java:29)

這是說在SidebarClass.java文件出現在29行你的錯誤需要看看這條線,並找出爲什麼會導致NPE。

+1

他甚至不需要一個活動,但他想要的是一個DrawerLayout和兩個片段。 – EpicPandaForce

+0

@EpicPandaForce是的,OP當然需要閱讀各種可用於執行他想要的操作的Android API類。我沒有深入研究他的代碼,看看他真的想做什麼。 –

+0

我知道從一個活動到另一個活動的意圖如何。我需要的是在所有活動中使用側邊欄方法!因爲這個我想創建一個具有側邊欄方法的類,然後我使用每個我想要的地方。 – hdiz

1

在處理DrawerLayout和ListView之前。您必須採取放置這些控件的View的句柄。

View view = inflater.inflate(R.layout.YOUR_LAYOUT, null, false); 
mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) view.findViewById(R.id.listview); 

希望這會幫助你。

+0

錯誤解決,但側邊欄沒有任何元素!另一件事是在邊欄類我沒有內容視圖,所以我如何定義在inflater的佈局?我的佈局是在activity_main! – hdiz

+0

你如何解決你的問題? – kamil

+0

測試我使用activity_main.xml! – hdiz