2015-07-09 59 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块内的代码只是不会执行。我正在阅读刚刚给我的调试器链接,但实际上没有更多的相关信息可以提供与此问题相关的信息。告诉我,如果我仍然缺少一些东西 –

相关问题