Android - HttpClient执行有自己的想法 - 1秒或200秒

时间:2011-07-11 21:57:07

标签: android http android-emulator httpclient http-post

我正在尝试使用HttpClient连接到登录的php页面并传回一个sessionid然后转到一个新页面,使用该sessionid获取与该sessionid相关联的mySQL数据字段。

在第一次请求时,HttpClient可能需要1.5秒,6秒或2分钟。如果第一个请求很慢,则子序列请求似乎更快,而visaversa。

单击Button视图时会发生HttpClient请求

这是我的代码:

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    name = (TextView)findViewById(R.id.name);
    user = (EditText) findViewById(R.id.user);
    pass = (EditText) findViewById(R.id.pass);
    submit = (Button) findViewById(R.id.button1);
    submit.setOnClickListener(this);
    HttpParams params1 = new BasicHttpParams();
    params1.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    client = new DefaultHttpClient(params1);
    httpclient = new DefaultHttpClient();
    // Create a local instance of cookie store
    cookieStore = new BasicCookieStore();
    // Create local HTTP context


}

public void onClick(View v) {
    if (v.getId() == R.id.button1) {
        //submit.setClickable(false);
        String username = user.getText().toString();
        String password = pass.getText().toString();
        String targetURL = "<<<<LOGIN PHP URL>>>>";

        post = new HttpPost(targetURL);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", username));
        params.add(new BasicNameValuePair("password", password));
        Log.d("params","params added");
        try {
            post.setEntity(new UrlEncodedFormEntity(params));
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        Log.d("entity added","entityadded");
        Log.d("preex","PRE EXECUTION");

        localContext = new BasicHttpContext();
        // Bind custom cookie store to the local context
        localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
        //submit.setText("Logging In...");
        new Thread(new Runnable(){
            public void run(){

            try {
                Log.d("pre","pre execute");
                response = client.execute(post,localContext);   
                Log.d("post","post execute");

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            Log.d("post","FIANLLY");
            try {
                input = response.getEntity().getContent();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Log.d("response: ",convertStreamToString(input));
            getFullName(localContext);

        }
            }

        }).start();}



}

private void getFullName(final HttpContext context){
    Log.d("called","called");
    String targetURL = "<<<<SESSION CHECKER PHP URL>>>>";
    //client1 = new DefaultHttpClient();
    post1 = new HttpPost(targetURL);
    Log.d("","about to call runable....");
//  submit.setText("Obtaining Full Name...");
        try {
            Log.d("pre","CALLING!");
            response = client.execute(post1,context);   
            Log.d("post","called..");

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        Log.d("post","FIANLLY");
        try {
            //submit.setText("Full Name Obtained!...");
            input = response.getEntity().getContent();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //Log.d("response: ",convertStreamToString(input));
        outputResponse(input);

    }

}


private void outputResponse(final InputStream in) {
    name.post(new Runnable(){
        public void run(){

            String fullname=convertStreamToString(in);
    name.setText("Full Name is: "+fullname);
        }
    });

}



private static String convertStreamToString(InputStream is) {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

在我设置Http 1.1版之前,花了两倍的时间,但对于我的应用程序,速度不可靠。这是一个非常快速的WiFi连接 - 你能成像Edge或3G速度吗?

那么我可以优化什么呢?

谢谢大家:)


编辑:我用http://www.posttestserver.com/做了一个新的测试,它发生得非常快。我目前使用的网址不是我最终的服务器网址,它们是针对不同服务器上的不同网站 - 共享主机,因此联系我的共享主机网站的速度可能很慢,并且会与我的网站进行比较。网络服务器?

再次感谢!

0 个答案:

没有答案