Android - выполнение HttpClient имеет собственный разум - 1 секунда или 200 секунд - PullRequest
2 голосов
/ 12 июля 2011

Я пытаюсь использовать HttpClient для подключения к странице php, которая входит в систему и передает сессионный идентификатор, а затем переходит на новую страницу, используя этот идентификатор сеанса и получает поле данных mySQL, связанное с этим идентификатором сеанса.

По первому запросу HttpClient может занять 1,5 секунды, 6 секунд или 2 минуты. Если первый запрос был медленным, подпоследовательность запросов, кажется, быстрее, и visversa.

Запрос HttpClient происходит при нажатии на представление Button

Вот мой код:

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/, и это произошло довольно быстро. URL-адреса, которые я использую в настоящее время, не являются моими окончательными URL-адресами серверов, они предназначены для другого сайта на другом сервере - хостинг с общим доступом, поэтому может случиться так, что контакт с моим сайтом с общим хостингом будет медленным и будет сравниваться с моим. сетевой сервер?

Еще раз спасибо!

...