2016-04-24 55 views
-2

的NullPointerException我下面this tutorialAndroid的 - 在我的活動

我有一個活動叫LogInActivity這是MainActivity

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    email = (EditText) findViewById(R.id.email); 
    password = (EditText) findViewById(R.id.password); 
    } 

    public void checkLogin(View view){ 
    final String emailText = email.getText().toString().trim(); 
    final String passwordTex = password.getText().toString().trim(); 
    StringRequest req = new StringRequest(Request.Method.POST, Constants.LOGIN_URL, successListener, errorListener) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("email", emailText); 
       params.put("password", passwordTex); 
       return params; 
      } 
     }; 

     ReqQueue.getInstance().getRequestQueue().add(req); 
    } 

刪除Listener functions爲簡單起見。

ReQueue類是如下

public class ReqQueue extends Application{ 
    private static ReqQueue instance; 
    private RequestQueue requestQueue; 
    private Context context; 

    @Override 
    public void onCreate(){ 
     super.onCreate(); 
     context = getApplicationContext(); 
     instance = this; 
    } 

    public static synchronized ReqQueue getInstance(){ 
     return instance; 
    } 

    public RequestQueue getRequestQueue(){ 
     if(requestQueue == null){ 
      requestQueue = Volley.newRequestQueue(context); 
     } 
     return requestQueue; 
    } 

    public <T> void addToReqQueue(Request<T> req){ 
     getRequestQueue().add(req); 
    } 
    } 

如果我執行的代碼,我得到NullPointeRException。我找到了它發生的位置。它發生在登錄活動的此行ReqQueue.getInstance().getRequestQueue().add(req);

實例爲空。但是我在本教程中提到的onCreate方法中創建實例。但是這種創建方法從未被調用過。

如果我在我的活動中做了所有的隊列活動,它本身就可以工作。我如何解決它?

堆棧錯誤

04-24 16:24:39.254 10272-10272/com.gopsab.loginsystem E/AndroidRuntime:致命異常:主 工藝:com.gopsab.loginsystem,PID :10272 java.lang.IllegalStateException:爲 機器人無法執行方法:在 android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)的onClick 一t android.view.View.performClick(View.java:5198) at android.view.View $ PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java .lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:616)

產生的原因:在java.lang.reflect.Method.invoke(本機方法) 在 android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288 java.lang.reflect.InvocationTargetException ) at android.view.View.performClick(View.java:5198) at android.view.View $ PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739 ) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) 在android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit。的java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

所致:顯示java.lang.NullPointerException:嘗試調用虛擬方法 「com.android.volley。請求隊列 com.gopsab.utils.ReqQueue.getRequestQueue()」在 com.gopsab.loginsystem.LoginActivity.checkLogin(LoginActivity.java:73)一個空對象 參考 上 在java.lang.reflect.Method.invoke (本機方法) 在 android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 在android.view.View.performClick(View.java:5198) 在android.view.View $ PerformClick.run(View.java:21147) 在android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main( ZygoteInit.ja VA:616)

+0

有什麼,收的?這是你的錯,你在教程中跳過了一些東西。空指針通常被低估 –

回答

0

我的猜測:你沒有一個android:name屬性添加到您的清單的<application>元素,在com.gopsab.utils.ReqQueue指點。其結果是,onCreate()從來沒有所謂,和instance仍然null

+0

哦,我的上帝。我認爲'名字'只是爲了命名。讓我試試這個Sir –

+0

@GopsAB:'android:label'是用於用戶可見的顯示名稱。 'android:name'用於標識特定元素的Java類。 ''不*需要*'安卓name',但隨後將只使用'android.app.Application',沒有你的自定義'Application'子類。 – CommonsWare

0

通過你的活動情境中ReqQueue通過構造函數,那麼它會不會給這個例外。在這個階段不要使用getApplicationContext()。