2015-07-09 63 views
0

我有一個通過android的服務器請求的代碼。這是我try塊的片段:我在try塊內的代碼沒有在android中執行。沒有其他線程似乎解釋這

try{ 
       post.setEntity(new UrlEncodedFormEntity(dataToSend)); 
       HttpResponse httpResponse = client.execute(post); 

       HttpEntity entity = httpResponse.getEntity(); 
       String result = EntityUtils.toString(entity); 
       JSONObject jsonObject = new JSONObject(result); 
       Toast.makeText(context,jsonObject.length()+"i ran",Toast.LENGTH_SHORT).show(); 

       if(jsonObject.length() != 0){ 
        Log.v("happened", "2"); 
        String dbname = jsonObject.getString("dbname"); 
        String userloggedin = jsonObject.getString("userloggedin"); 
        String username = jsonObject.getString("username");String password = jsonObject.getString("password"); 
        String email = jsonObject.getString("email");String name = jsonObject.getString("name"); 
        String dob = jsonObject.getString("dob"); String mobile = jsonObject.getString("mobile"); 
        String imagelink = jsonObject.getString("imagelink");String country = jsonObject.getString("country"); 
        String currency = jsonObject.getString("currency");String recentcount = jsonObject.getString("recentcount"); 
        String lowoncashlevel = jsonObject.getString("lowoncashlevel"); 
        returnedUser = new User(dbname,Boolean.getBoolean(userloggedin),username,password,name,dob,mobile,email,imagelink,country,currency,Integer.getInteger(recentcount),Integer.getInteger(lowoncashlevel)); 
       } 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 

我知道,因爲有在後臺運行過一個進度對話框中的麪包會導致錯誤,但它沒有,這就是我發現,try塊是問題出在哪裏。

這是有這個方法的類:

public class FetchUserDataAsyncTask extends AsyncTask<Void,Void,User> { 

     User user; 
     GetUserCallBack userCallBack; 

     public FetchUserDataAsyncTask(User user, GetUserCallBack userCallBack){ 
      this.user=user; 
      this.userCallBack=userCallBack; 
     } 

     @Override 
     protected User doInBackground(Void... params) { 
      ArrayList<NameValuePair> dataToSend = new ArrayList<>(); 
      dataToSend.add(new BasicNameValuePair("username",user.username)); 
      dataToSend.add(new BasicNameValuePair("password",user.password)); 

      HttpParams httpRequestParams = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT); 
      HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT); 

      HttpClient client = new DefaultHttpClient(httpRequestParams); 
      HttpPost post = new HttpPost(SERVER_ADDRESS + "FetchUserData2.php"); 

      User returnedUser = null; 

      try{ 
       post.setEntity(new UrlEncodedFormEntity(dataToSend)); 
       HttpResponse httpResponse = client.execute(post); 

       HttpEntity entity = httpResponse.getEntity(); 
       String result = EntityUtils.toString(entity); 
       JSONObject jsonObject = new JSONObject(result); 
       Toast.makeText(context,jsonObject.length()+"i ran",Toast.LENGTH_SHORT).show(); 

       if(jsonObject.length() != 0){ 
        Log.v("happened", "2"); 
        String dbname = jsonObject.getString("dbname"); 
        String userloggedin = jsonObject.getString("userloggedin"); 
        String username = jsonObject.getString("username");String password = jsonObject.getString("password"); 
        String email = jsonObject.getString("email");String name = jsonObject.getString("name"); 
        String dob = jsonObject.getString("dob"); String mobile = jsonObject.getString("mobile"); 
        String imagelink = jsonObject.getString("imagelink");String country = jsonObject.getString("country"); 
        String currency = jsonObject.getString("currency");String recentcount = jsonObject.getString("recentcount"); 
        String lowoncashlevel = jsonObject.getString("lowoncashlevel"); 
        returnedUser = new User(dbname,Boolean.getBoolean(userloggedin),username,password,name,dob,mobile,email,imagelink,country,currency,Integer.getInteger(recentcount),Integer.getInteger(lowoncashlevel)); 
//     returnedUser = new User(jsonObject.getString("dbname"),Boolean.getBoolean(jsonObject.getString("userloggedin")), 
//       jsonObject.getString("username"),jsonObject.getString("password"),jsonObject.getString("name"), 
//       jsonObject.getString("dob"),jsonObject.getString("mobile"),jsonObject.getString("email"), 
//       jsonObject.getString("imagelink"),jsonObject.getString("country"),jsonObject.getString("currency"), 
//       Integer.getInteger(jsonObject.getString("recentcount")),Integer.getInteger(jsonObject.getString("lowoncashlevel"))); 
       } 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
      return returnedUser; 
     } 
     @Override 
     protected void onPostExecute(User returnedUser) { 
      progressDialog.dismiss(); 
      userCallBack.done(returnedUser); 
      super.onPostExecute(returnedUser); 
     } 
    } 

執行方法是從這個公共方法叫:

public void fetchUserDataInBackground(User user,GetUserCallBack userCallBack){ 
     progressDialog.show(); 
     new FetchUserDataAsyncTask(user,userCallBack).execute(); 
    } 
+0

敬酒不從後臺線程運行,並會拋出異常。但是由於您沒有到達那裏,因此您調用FetchUserDataAsyncTask類的方式看起來有錯誤。你能顯示你實際調用它的那一行代碼嗎?我的猜測是,當你打算開始這個類時,你錯過了execute()方法 – ucsunil

+0

@Gogeta是的,我知道吐司會拋出一個異常。我在try塊之前放了一個toast,它引發了一個錯誤,所以我推斷try塊上面的代碼已經到達,但try塊仍然沒有被觸及。 我添加的方法調用質疑 –

+0

您可以將上線新FetchUserDataAsyncTask(.....)斷點,看看是否正在達到該行代碼?乍一看你的try/catch語句似乎很好。所以它必須是調用來啓動沒有運行的AsyncTask。 – ucsunil

回答

0

的問題是太寬泛,得到適當的答案,但即使您發佈代碼的所有相關部分,並且您的問題將得到解決,我認爲從這個問題中可以得到的最好結果是您必須學會使用調試器!

Android Studio中使用調試器是一塊蛋糕,真的。

如果您添加多個斷點並在調試模式下運行您的應用程序,只需幾分鐘時間,您就可以精確定位導致問題的確切線路並自行解決問題,或詢問更具體的問題。

調試程序教程:https://developer.android.com/tools/debugging/debugging-studio.html

編輯:

我的猜測是,該代碼被執行,並拋出異常,但你忽略它在你的catch塊(除了打印堆棧跟蹤),因此看起來沒有例外。關於該事項幾點:

  1. 永遠不要寫catch (Exception e) - 總是寫catch條款對特定類型ecxeptions
  2. 的藏在心裏try代碼到最低限度。在你的情況下,實在沒有必要對所有這些代碼由try - catch(或者,至少不是單一try - catch塊)是守衛
+0

我認爲我的問題很窄。我不知道還需要更多縮小範圍。如果你重新閱讀帖子,你會發現我所要求的。我知道問題出在哪裏,我不知道這是爲什麼我發佈這個問題的原因。 –

+0

@JaiSaxena,如果你告訴我們你認爲代碼沒有執行,因爲你沒有看到吐司/錯誤,那麼它不會被縮小。事實上,這是非常不專業的。縮小爲:「執行卡在行號X」。你可以接受我的建議,或不是 - 這取決於你...... – Vasiliy

+0

我的代碼在try塊內不被執行。變量未被更新,吐司不會導致錯誤。 try塊是我的問題。我如何縮小它了! TRY塊是IST執行!我非常有信心,如果我使用User()對象初始化returnedUser,代碼可以正常工作,這不是問題。沒有錯誤。沒有例外。 try塊內的代碼只是不會執行。我正在閱讀剛剛給我的調試器鏈接,但實際上沒有更多的相關信息可以提供與此問題相關的信息。告訴我,如果我仍然缺少一些東西 –

相關問題