неожиданное поведение андроид программы

1

Я хочу запустить script за кнопкой поиска Google, что означает... отправку формы на сервер google и получение ответа в виде строки html, и, наконец, я помещаю эту строку в webview для отображения результата.... затем я запускаю код... несколько раз он показывает правильный результат (например, кто-то нажимает кнопку поиска Google), но иногда он показывает мне сообщение "заставить закрыть" без каких-либо изменений, которые я делаю в коде.... это означает, что предсказание о выходе неожиданно... Мой код такой вот...

public class url extends Activity
 {
    HttpResponse end = null;
    String endResult = null;
    WebView mWebView;
    Intent myWebViewIntent;
     public static  final int TIMEOUT_MS=10000;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        HttpClient client = new DefaultHttpClient();

        HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT_MS);
        HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT_MS);
        HttpPost post = new HttpPost("http://www.google.com/m");
        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
        pairs.add(new BasicNameValuePair("hl", "en"));
        pairs.add(new BasicNameValuePair("gl", "us"));
        pairs.add(new BasicNameValuePair("source", "android-launcher-widget"));
        pairs.add(new BasicNameValuePair("q", "persistent"));

        try {
            post.setEntity(new UrlEncodedFormEntity(pairs));
        /*  Uri uri = Uri.parse(post.toString());
            TextView t1=new TextView(this);
            t1.setText(post.getRequestLine().getUri());
            this.setContentView(t1);*/

        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            Toast msg = Toast.makeText(url.this, "Message", Toast.LENGTH_LONG);

            msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);

            msg.show();

            HttpResponse response = client.execute(post);

            end = response;


        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            //Toast.makeText(url.this, "problem in execute....", 20).show();
            // TODO Auto-generated catch block
            //put the balance is empty dialog box here.
            e.printStackTrace();
        }
        BasicResponseHandler myHandler = new BasicResponseHandler();
        try {

        //  Log.i("file tag","we are out of url");
            endResult = myHandler.handleResponse(end);

        } catch (HttpResponseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

    WebView engine = (WebView)findViewById(R.id.webview);
    engine.loadDataWithBaseURL(post.getRequestLine().getUri(), endResult, "text/html", "UTF-8", null);
        //engine.loadData(endResult, "text/html", "UTF-8");
        engine.requestFocus(View.FOCUS_DOWN);


         //engine.loadUrl(endResult);

    }
}

есть ли проблема в эмуляторе или установка SDK или самой программы....? becoz это, кажется, связь с Интернетом, но я использую правильное разрешение.. спасибо..

Теги:
webview

1 ответ

4
Лучший ответ

ANR вы получаете, потому что вы делаете блокирующий вызов в потоке пользовательского интерфейса. Чтобы выполнить блокирующее действие без блокировки потока пользовательского интерфейса, вам нужно использовать поток и обработчик или (рекомендуется) AsyncTask.

См. Безболезненная резьба.

  • 0
    - спасибо, это работает, потому что ASYNCTASK ......
  • 0
    @Saurabh, пожалуйста, не забудьте принять ответ!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню