2015-11-03 120 views
0

我一直堅持這個問題幾天,我想progresdialog顯示,但它沒有顯示。當我登錄時,我想讓asyncHttpTask顯示和解除processdialog,但這並沒有發生。進程對話框不顯示asynctask android

在我的活動登錄

@OnClick(R.id.login) 
public void clickLogin() { 

    if ((!etUsername.getText().toString().equals("")) && (!etPassword.getText().toString().equals(""))) { 
     boolean succesfullLogin=new UserFunctions(). 
       loginUser(etUsername.getText().toString(), 
       etPassword.getText().toString(),Login.this); 
     if(succesfullLogin){ 
      Intent intent = new Intent(getApplicationContext(), Home.class); 
      startActivity(intent); 
      finish(); 
     }else{ 

     } 


    } else if ((!etPassword.getText().toString().equals(""))) { 
     Toast.makeText(getApplicationContext(), 
       "Password field empty", Toast.LENGTH_SHORT).show(); 
    } else if ((!etUsername.getText().toString().equals(""))) { 
     Toast.makeText(getApplicationContext(), 
       "Username field empty", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(getApplicationContext(), 
       "Username and Password field are empty", Toast.LENGTH_SHORT).show(); 
    } 
} 

類userFunctions的loginuser它調用異步任務

public Boolean loginUser(String username, String password, Login context) { 
    ProgressDialog pDialog = new ProgressDialog(context); 

    pDialog.setTitle("Contacting Servers"); 
    pDialog.setMessage("Logging in ..."); 
    pDialog.setIndeterminate(false); 
    pDialog.setCancelable(true); 

    Map<String, String> map = new HashMap<>(); 
    map.put("url", loginURL); 
    map.put("username", username); 
    map.put("password", password); 

    AsyncHttpTask loginTask = new AsyncHttpTask(pDialog); 

    try { 
     HttpObject response = loginTask.execute(map).get(); 


     if (response.getResponseCode() == 200) { 
      JSONObject json = response.getJsonObject(); 


      DatabaseHandler db = new DatabaseHandler(context); 

      Log.i("json user:", json.getString("username")); 

      /** 
      * Clear all previous data in SQlite database. 
      **/ 
      UserFunctions logout = new UserFunctions(); 
      logout.logoutUser(context); 
      //db.addUser(json_user.getString(KEY_FIRSTNAME), json_user.getString(KEY_LASTNAME), json_user.getString(KEY_EMAIL), 
       //  json_user.getString(KEY_USERNAME), json_user.getInt(KEY_AGE), json_user.getInt(KEY_NRCHILDREN), 
       // json_user.getString(KEY_CIVILSTATUS), json_user.getString(KEY_SEX), json_user.getInt(KEY_VEGETARIAN) == 0 ? false : true); 


      Log.i("succes", "succesfull log in"); 
      return true; 


     } else { 
      Toast.makeText(context, 
        "Wrong username or password", Toast.LENGTH_SHORT).show(); 

      Log.i("errormessage", "Incorrect username/password"); 
     } 


    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


    return false; 
} 

終於AsyncHttpTask延伸的AsyncTask

public class AsyncHttpTask extends AsyncTask<Map<String, String>, Integer, HttpObject> { 


private ProgressDialog pDialog; 
private HttpObject httpObject; 
private HttpURLConnection urlConnection = null; 


public AsyncHttpTask(ProgressDialog pDialog) { 
    this.pDialog = pDialog; 
    httpObject = new HttpObject(); 
} 


@Override 
protected void onPreExecute() { 
    //super.onPreExecute(); 
    pDialog.setMessage("Doing something, please wait."); 
    pDialog.show(); 
} 


@Override 
protected HttpObject doInBackground(Map<String, String>... params) { 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 



    try { 
     buildConnection(params[0]); 

     httpObject.setResponseCode(urlConnection.getResponseCode()); 
     if (httpObject.getResponseCode() == 200) { 

      buildJson(new BufferedInputStream(urlConnection.getInputStream())); 
     } 


    } catch (IOException e) { 
     Log.i("HttpTask:",e.getMessage()); 
     e.printStackTrace(); 
    } 
    return httpObject; 
} 




private void buildConnection(Map<String, String> urlMap) throws IOException { 


    URL url = new URL(urlMap.get("url")); 
    urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setRequestMethod("GET"); 

    for (String key : urlMap.keySet()) { 
     if (key != "url") { 
      urlConnection.setRequestProperty(key, urlMap.get(key)); 
     } 

    } 

    Log.i("HttpTask", urlConnection.toString()); 
    Log.i("HttpTask", url.toString()); 


} 

private void buildJson(BufferedInputStream is) { 
    String json = ""; 
    JSONObject jObj = null; 
    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     Log.i("json in string: ", json); 
     json = sb.toString(); 
     Log.e("JSON", json); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 

    // try parse the string to a JSON object 
    try { 
     Log.i("json in string: ", json); 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 
    httpObject.setJsonObject(jObj); 
} 


@Override 
protected void onPostExecute(HttpObject httpObject) { 
    super.onPostExecute(httpObject); 
    pDialog.dismiss(); 
} 
} 

感謝clicklogin方法幫助我:)

+0

'HttpObject響應= loginTask.execute(圖)獲得();'如果該行代碼工作,這個任務現在不會是異步的,是嗎?查看一些AsyncTask教程,看看你應該如何構建你的程序。 –

+0

是的,這確實是問題所在。我的錯誤是複製粘貼到很多代碼而沒有完全理解它的作用,現在我感到非常愚蠢。 謝謝:) – Timvr01

回答

0

問題是我不理解的AsyncTask

這是我在做什麼錯:

HttpObject response = loginTask.execute(map).get()