2014-05-13 43 views
0

我有一個android應用程序,它有兩個相鄰的查詢,它們都填充了私有變量。我在模擬器上運行它,並由於空指針異常而崩潰。在對它進行調試並跟蹤程序之後,它會轉到下面的代碼並完全跳過它並轉到imgFavorite行。有關爲何發生這種情況的任何建議?Windows Azure查詢不在Android應用程序中執行

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

      setContentView(R.layout.test_activity); 
      try { 
       mClient = new MobileServiceClient(
          "https://classconnect.azure-mobile.net/", 
          "HzaUWkJBnWTXxCuREwxyQSaxJSyyJm51", 
          this 
        ); 
       // TODO: 3 Get the Mobile Service Table instance to use 
       mUserTable = mClient.getTable(User.class); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       mEmail = getIntent().getStringExtra("Email"); 

      mUserTable.where().field("email").eq(mEmail).execute(new TableQueryCallback<User>() { 
       @Override 
       public void onCompleted(List<User> result, int arg1, 
         Exception arg2, ServiceFilterResponse arg3) { 
        // TODO Auto-generated method stub 
        if (arg2 == null){ 
         if(!result.isEmpty()){ 
          currentUser = result.get(0); 
          System.out.println(currentUser.getfName()); 
        } else{ 
         System.out.println("Error"); 
        } 
        } 
       } 
      }); 

      mUserTable.select("email").execute(new TableQueryCallback<User>(){ 

       @Override 
       public void onCompleted(List<User> result, int arg1, 
         Exception arg2, ServiceFilterResponse arg3) { 
        // TODO Auto-generated method stub 
        if(arg2 == null){ 
         for(User i : result){ 
          allUsers.add(i.getEmail()); 
         } 
        } else{ 
         System.out.println("Error"); 
        } 
       } 

      }); 


      imgFavorite = (ImageView) findViewById(R.id.imageView1); 

回答

0

當你對移動服務的調用(如mUserTable.select或mUserTable.where電話),你作爲參數傳遞的回調正是,回調。這些請求是異步進行的,回調代碼僅在您的移動服務響應時執行。如果你在這些回調中加入了斷點,一旦收到響應,你會看到它們被執行。這就是爲什麼它看起來像執行跳過該代碼,並直接進入imgFavorite行。至於爲什麼你得到一個空的異常,你必須通過你的代碼,看看哪一行代碼實際上是觸發它。

+0

我應該更具體。當我試圖操縱我試圖從數據庫中獲取的「currentUser」時,我得到一個空指針。我使用oncreateview片段方法訪問它。我是否應該用這種方法執行等待或等待來自天藍色的響應? – rhoran2

+0

我會考慮顯示一個活動指示器,以便用戶知道發生了什麼,然後在知道您收到回調代碼後對當前用戶進行操作。 – Chris

相關問題