android开发,模拟登录时的问题,求助大神~~

问题描述

android开发,模拟登录时的问题,求助大神~~

尝试做一个学校的教务系统android app,模拟登陆过程都没有问题,使用的是asynhttpclient。只是登陆成功后,只会跳转至如图中(2)这个url中,里面content的内容只是是:{success:true,tips:'登录成功',newsms:0,uid:'xxxxxxxxx'},没有其他内容。所以AsyncHttpResponseHandler的onSuccess()方法得到的也只是这个页面的信息,而我想要进一步操作查询成绩或课表则需要跳转到后面(3)这几个URL,不知如何从代码中实现。我想过直接使用(3)中的url,然后传入get(urlString,params,AsyncHttpResponseHandler)方法直接操作,但是如图所示,(3)中每个url后面都有个_dc="xxxxxxxxxxx"这个参数,也就是Query String中的信息,而这个每次都是随机的,所以我也没法取得参数带入到params中,现在举步维艰.....所以求助大神我到这一步应该如何解决
下面是我的代码:

public class LoginActivity extends Activity {
    private EditText username, password;
    private Button login;
    private PersistentCookieStore cookie;
    private SQLiteDatabase db;
    private LinkService linkService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        Log.i("tag", "create");
        initValue();// 变量初始化
        initView();// 视图初始化
        initCookie(this);// cookie初始化
        initEvent();// 事件初始化
        initDatabase();// 数据库初始化
    }

    private void initValue() {
        linkService = LinkService.getLinkService();
    }

    private void initView() {
        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);
        login = (Button) findViewById(R.id.login);
    }

    private void initCookie(Context context) {
        Log.i("tag", "执行了initCookie");
        cookie = new PersistentCookieStore(context);
        HttpUtil.getClient().setCookieStore(cookie);
        getCookieText();
    }

    /**
     * 获取标准 Cookie
     */
    private String getCookieText() {
        List<Cookie> cookies = cookie.getCookies();
        Log.d("getCookieText", "cookies.size() = " + cookies.size());
        Utils.setCookies(cookies);
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < cookies.size(); i++) {
            Cookie cookie = cookies.get(i);
            String cookieName = cookie.getName();
            String cookieValue = cookie.getValue();
            if (!TextUtils.isEmpty(cookieName) && !TextUtils.isEmpty(cookieValue)) {
                sb.append(cookieName + "=");
                sb.append(cookieValue + ";");
            }
        }
        Log.e("getCookieText", sb.toString());
        return sb.toString();
    }

    private void initEvent() {
        login.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                login();
            }
        });
    }

    private void initDatabase() {
        db = Connector.getDatabase();
    }

    /**
     * 跳转至主页
     */
    private void jump2Main() {
        SharedPreferenceUtil util = new SharedPreferenceUtil(getApplicationContext(), "accountInfo");
        util.setKeyData("username", HttpUtil.j_username);
        util.setKeyData("password", HttpUtil.j_password);
        util.setKeyData("isLogin", "TRUE");
        Intent intent = new Intent(LoginActivity.this, EduMainActivity.class);
        startActivity(intent);
        finish();
    }

    private void login() {
        HttpUtil.j_username = username.getText().toString().trim() + ",undergraduate";
        HttpUtil.j_password = password.getText().toString().trim();
        if (TextUtils.isEmpty(HttpUtil.j_username) || TextUtils.isEmpty(HttpUtil.j_password)) {
            Toast.makeText(getApplicationContext(), "账号或密码不可以为空!", Toast.LENGTH_SHORT).show();
            return;
        }

        final ProgressDialog dialog = CommonUtil.getProcessDialog(LoginActivity.this, "正在登录中!");
        dialog.show();

        RequestParams params = HttpUtil.getLoginRequestParams();// 获得请求参数
        HttpUtil.getClient().setURLEncodingEnabled(true);
        HttpUtil.post(HttpUtil.URL_LOGIN, params, new AsyncHttpResponseHandler() {

            @Override
            public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
                try {
                    String resultContent = new String(arg2, "UTF-8");
                    Log.i("tag", resultContent);
                    if (resultContent.contains("tips:'登录成功'")) {
                        Toast.makeText(getApplicationContext(), "登录成功!!!", Toast.LENGTH_SHORT).show();
                        getCookieText();
                        jump2Main();
                    } else {
                        Toast.makeText(getApplicationContext(), "账号或者密码错误!!!", Toast.LENGTH_SHORT).show();
                    }

                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } finally {
                    dialog.dismiss();
                }
            }

            @Override
            public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
                Toast.makeText(getApplicationContext(), "登录失败!!!!", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(intent);
        overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
        finish();
    }
}

解决方案

[求助]PHP Curl 模拟登录问题

解决方案二:

Robolectric 这个自动化测试框架可以解决你的问题,带有离线http的返回设置

时间: 2024-10-27 15:58:30

android开发,模拟登录时的问题,求助大神~~的相关文章

sample-jmf 开发视频聊天时出现问题求大神解决

问题描述 jmf 开发视频聊天时出现问题求大神解决 运行后出现:LINEAR, Unknown Sample Rate out * LINEAR, 8000.0 Hz, 16-bit, Stereo, LittleEndian, Signed, class [S

后端开发-winphone手机后台搭建,求助大神们

问题描述 winphone手机后台搭建,求助大神们 参加了微软的一个比赛,我们队打算做手机方面的.就是怎么搭建一个手机后台服务器,能给手机反馈消息(显示在手机上的).还能把手机三维空间信息画出来的.我的问题是这个可不可以在vs上开发出来.具体思路是什么. 解决方案 求大神们给个简要思路,我查了好久发现都没这方面的案例.不懂是我弄错没有 解决方案二: 怎么传输数据,选择协议,后台根据协议选择数据库产生回应,不知道这样可以吗

Java模拟登录淘宝有没有大神做过?

问题描述 最好有代码,谢谢 解决方案 解决方案二:什么意思,做向淘宝一样的登陆框,还是>?>>解决方案三:引用1楼xmt1139057136的回复: 什么意思,做向淘宝一样的登陆框,还是>?>> 用java代码发送请求登录不是通过界面解决方案四:肯定很多验证很多参数.模拟登陆没那么容易.解决方案五:引用2楼jsshizhanab的回复: Quote: 引用1楼xmt1139057136的回复: 什么意思,做向淘宝一样的登陆框,还是>?>> 用java代

php curl 模拟登录时出现invalid viewstate问题 求助啊~

问题描述 php curl 模拟登录时出现invalid viewstate问题 求助啊~ 页面错误 此页面发现一个意外错,对此我们非常抱歉. 请系统管理员及时与我们联系,我们会尽快解决此问题! 错误发生位置:http://csujwc.its.csu.edu.cn/_data/index_login.aspx 错误消息: Invalid_Viewstate Client IP: 202.197.61.238 Port: 61338 User-Agent: Mozilla/5.0 (Window

nfc技术-Android开发NFC功能时遇到的问题Ndef.get(tag)返回null

问题描述 Android开发NFC功能时遇到的问题Ndef.get(tag)返回null 照着网上资料写的,但就是不成功,经过多次调试最终发现问题位置: Ndef ndef = Ndef.get(tag); 这句返回的总是null,但是tag是有值的,TAG: Tech [android.nfc.tech.MifareClassic, android.nfc.tech.NfcA, android.nfc.tech.NdefFormatable] 同样的,NdefFormatable format

PHP读取CURL模拟登录时生成Cookie文件的方法_php技巧

本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登录时会保存一个Cookie文件,例如下面的代码 复制代码 代码如下: $login_url = 'XXX';    $post_fields['email'] = 'XXXX';  $post_fields['password'] = 'XXXX';  $post_fields['origURL'] = 'XXX';  $post_fields['doma

post登录-android Volley Post登录时返回登录页面,不能登录进去

问题描述 android Volley Post登录时返回登录页面,不能登录进去 使用Volley框架 Post登录时能返回html页面,但现显示的是我尚未登录 代码如下,抓到的post包在下面 public class MainActivity extends Activity { TextView show; private String myCookies; @Override protected void onCreate(Bundle savedInstanceState) { sup

绘制-Android开发 棋子移动的实现(求助)

问题描述 Android开发 棋子移动的实现(求助) 想移动一个白色棋子到空白坐标的地方改怎么做?(麻烦各位大虾帮忙啊) 棋子绘制代码: for(int q=0;q<5;q++){ mPaint.setColor(Color.BLACK); canvas.drawCircle(startX, startY+q*GRID_WIDTH, GRID_WIDTH / 4, mPaint); mPaint.setColor(Color.WHITE); canvas.drawCircle(startX+4*

delphi webbrowser实现模拟登录遇到的问题 求助

问题描述 delphi webbrowser实现模拟登录遇到的问题 求助 代码如下: procedure TForm1.btn1Click(Sender: TObject); varcurrUrl:IWebBrowser; iall : IHTMLElement;begin try finally wb1.Navigate('http://www.huishangbao.com/member/login.php'); wb1.OleObject.Document.getElementById('