2013-10-29 69 views
-1

請幫助我糾正如何正確編碼將登錄到網絡的Android活動以及何時成功登錄的錯誤,它可以開始查看該網絡的內容門戶網站?如何使用Android代碼正確登錄到網絡

這是我未完成的代碼,請糾正我的錯誤。提前致謝!

package com.example.weblogin; 


import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 


public class LoginActivity extends Activity implements OnClickListener { 

    private ProgressDialog pDialog; // Progress Dialog 
    private static final String LOGIN_URL = "http://vo.aimglobalinc.com/control/con_login.asp"; 
    JSONParser jsonParser = new JSONParser(); // JSON parser class 

    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_MESSAGE = "message"; 

    private EditText user, pass; 
    private Button mSubmit, mRegister; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    //requestWindowFeature(Window.FEATURE_NO_TITLE); 
    //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      //WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    // get intent data 
    Intent i1 = getIntent(); 
    // Selected image id 
    i1.getExtras().getInt("login"); 
    setResult(RESULT_OK, i1); 

    //setup input fields 
    user = (EditText)findViewById(R.id.txt_username); 
    pass = (EditText)findViewById(R.id.txt_password); 
    //setup buttons 
    mSubmit = (Button)findViewById(R.id.btn_login); 
    mRegister = (Button)findViewById(R.id.btn_register); 
    //register listeners 
    mSubmit.setOnClickListener(this); 
    mRegister.setOnClickListener(this); 

} 

     @Override 
     public void onClick(View v) { 

      switch (v.getId()) { 
      case R.id.btn_login: 
       new AttemptLogin().execute(); 
       break; 
      case R.id.btn_register: 
       //Intent i = new Intent(this, RegisterActivity.class); 
       //startActivity(i); 
       break; 
      default: 
       break; 
      } 
     } 


     class AttemptLogin extends AsyncTask<String, String, String> { 
      //three methods get called, first preExecture, then do in background, and once do 
      //in back ground is completed, the onPost execture method will be called. 

      /** 
      * Before starting background thread Show Progress Dialog 
      * */ 
      boolean failure = false; 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       pDialog = new ProgressDialog(LoginActivity.this); 
       pDialog.setMessage("Attempting login..."); 
       pDialog.setIndeterminate(false); 
       pDialog.setCancelable(true); 
       pDialog.show(); 

      } 
      @Override 
      protected String doInBackground(String... args) { 
       // TODO Auto-generated method stub 
       // Check for success tag 
       int success; 
       String username = user.getText().toString(); 
       String password = pass.getText().toString(); 

       try { 
        // Building Parameters 
        List<NameValuePair> params = new ArrayList<NameValuePair>(); 
        params.add(new BasicNameValuePair("uname", username)); 
        params.add(new BasicNameValuePair("pword", password)); 

        Log.d("request!", "starting"); 
        // getting product details by making HTTP request 
        JSONObject json = jsonParser.makeHttpRequest(
         LOGIN_URL, "POST", params); 
        // check your log for json response 
        Log.d("Login attempt", json.toString()); 
        // json success tag 
        success = json.getInt(TAG_SUCCESS); 
        if (success == 1) { 
         Log.d("Login Successful!", json.toString()); 
         //Toast.makeText(LoginActivity.this, "Login Successful!", Toast.LENGTH_LONG).show(); 
         //Intent i = new Intent(LoginActivity.this, PortalContents.class); 
         finish(); 
         //startActivity(i); 
         return json.getString(TAG_MESSAGE); 
        }else{ 
         Log.d("Login Failure!", json.getString(TAG_MESSAGE)); 
         //Toast.makeText(LoginActivity.this, "Login Fail!", Toast.LENGTH_LONG).show(); 
         return json.getString(TAG_MESSAGE); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

       return null; 

      } 
      /** 
      * After completing background task Dismiss the progress dialog 
      * **/ 

      protected void onPostExecute(String file_url) { 
       // dismiss the dialog once product deleted 
       pDialog.dismiss(); 
       if (file_url != null){ 
        Toast.makeText(getApplicationContext(), file_url, Toast.LENGTH_LONG).show(); 

       } 


      } 


     } 

} 
+0

你正試圖實現一個網頁瀏覽器? – sschrass

+0

你可以縮小這一點,你面臨的具體問題是什麼? – Henry

+0

@Satellite SD:不,我正在嘗試爲我們公司的網頁開發Android應用程序。我們的網頁是http://www.allianceinmotion.com/members.asp – Hahn

回答

0

您需要配置您的服務器(如: - 本地IIS服務器)返回的響應,如果登錄憑據正確

我登錄的AsyncTask代碼: -

private class GetLogin extends AsyncTask<Void, Void, Void> { 


     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      response = null; 
      try { 
       progressDialog = new ProgressDialog(Login.this, android.R.style.Theme_Holo_Light_Dialog); 
       progressDialog.setMessage("Please wait..."); 
       progressDialog.setOnCancelListener(new OnCancelListener() { 

        @Override 
        public void onCancel(DialogInterface dialog) { 

         if(getLogin !=null && getLogin.getStatus() != AsyncTask.Status.FINISHED){ 
          getLogin.cancel(true); 
         } 

        } 
       }); 
       progressDialog.show(); 
      } catch (Exception e) { 
      } 
     } 

     protected Void doInBackground(Void... params) { 


      try{ 
       String deviceId = CommonString.deviceId; 
       String buildVesrsion = CommonString.buildVersion; 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("email", edtEmail.getText().toString().trim()); 
       map.put("password", edtPassword.getText().toString().trim()); 
       map.put("deviceID", deviceId); 
       map.put("buildV", buildVesrsion); 
       map.put("Platform", CommonString.en); 
       map.put("deviceTokenId", regId); 
       response = CommonFunction.PostRequest("login", map); 
      }catch(Exception e){ 
       response = null; 
      } 


      return null; 
     } 

     @Override 
     protected void onCancelled() { 
     } 
     @Override 
     protected void onPostExecute(Void result) { 

      if(response != null && !response.equals("")){ 
       parseResponse(response); 
      }else{ 

       if(progressDialog != null & progressDialog.isShowing()){ 
        progressDialog.dismiss(); 
       } 

       Toast.makeText(getApplicationContext(), CommonString.NO_NETWORK, Toast.LENGTH_SHORT).show(); 
      } 

     } 
    } 

我從服務器得到一個「響應」,我使用這個函數解析它: -

private void parseResponse(String responce) { 
try { 


    JSONObject object = new JSONObject(responce); 
    rCode = Integer.parseInt(object.getString("rcode")); 
    switch (rCode) { 

    case 100: // If respose is true do here 
     isLoginCorrect = true; 
     JSONObject data = object.getJSONObject("data"); 
     JSONObject userInfo = data.getJSONObject("userInfo"); 
     break; 
    case 101: // Different errors based on the errors you have defined in your server 
     isLoginCorrect = false; 
     message = object.getString("msg"); 
     handler.sendEmptyMessage(0); 
     break; 
    case 102: 
     isLoginCorrect = false; 
     message = object.getString("msg"); 
     Toast.makeText(Login.this.getApplicationContext(), "There seems to be some trouble with your account, please login again.", Toast.LENGTH_SHORT).show(); 
     handler.sendEmptyMessage(0); 
     break; 
    case 103: 
     isLoginCorrect = false; 
     message = object.getString("msg"); 
     handler.sendEmptyMessage(0); 
     break; 
    case 104: 
     isLoginCorrect = false; 
     message = object.getString("msg"); 
     handler.sendEmptyMessage(0); 
     break; 
    case 105: 
     isLoginCorrect = false; 
     message = object.getString("msg"); 
     handler.sendEmptyMessage(0); 
     break; 
    default: 
     break; 
    } 

} catch (Exception e) { 
    e.printStackTrace(); 
    isLoginCorrect = false; 


} 
    } 

你可以做一些像這樣。

+0

謝謝,拉胡爾。我會嘗試你給出的這段代碼。只是一個簡單的問題:你從哪裏得到這些「rcode」,「data」,「userInfo」和「msg」。你剛剛設置了嗎?或者你從網絡瀏覽器的開發者工具中獲得它?你從哪裏可以得到網頁的迴應? Hahn

+0

即使我無法訪問我們公司的服務器,我仍然可以實現它嗎?任何解決方法? – Hahn

+0

這些是由服務器提供的響應中的json對象。這在.net中處理。他們提供這種迴應。我不處理服務器端代碼,所以你必須問別人如何做到這一點,對不起 –