HTTP-соединение и базовая аутентификация Android - PullRequest
0 голосов
/ 06 октября 2011

У меня действительно крепкий орешек с ошибкой. Api используется v11, сота 3.0 У меня есть asynctask внутри фрагмента загрузки из XML API с базовой аутентификацией. Он отлично работает, даже когда я изменяю параметры из фрагмента внутри с помощью edittexts и т. Д. Но когда я пытаюсь изменить вид автозаполнения из-за пределов фрагмента, внезапно я получаю исключение «нет элемента в строке 1. столбец 0». Я попробовал androidhttpclient, возился с systemprop (http.keepalive) и полностью сузил его до этого метода.

public void setStations(String a, String b){
    AutoCompleteTextView fromET = (AutoCompleteTextView ) getView().findViewById(R.id.from);  
    fromET.setText(a);

    AutoCompleteTextView toET = (AutoCompleteTextView) getView().findViewById(R.id.to);  
    toET.setText(b);
}

Когда этот метод выполняется, он где-то загружает мою задачу загрузки. Если я вручную отредактирую это текстовое представление, оно будет работать нормально.

    class LoadDataTask extends AsyncTask<String, Integer, ArrayList<Reisadvies>> {
        private Exception ex;
        private ProgressDialog pd;

        protected void onPreExecute() {
            //loadprogressdialog
        }

        protected ArrayList<Reisadvies> doInBackground(String... params) {
            try{
                ex = null;
                return new APIreader().getRA(params[0], params[1], params[2],params[3],params[4],params[5], params[6]);
            }catch (Exception e){
                cancel(true);
                pd.dismiss();
                ex = e;
                return null;
            }
        }

        protected void onPostExecute(ArrayList<Reisadvies> ra){
            //send list to activity
        }

        protected void onCancelled() {
            super.onCancelled();
            showError(ex);
        }
    }  

};


public ArrayList<Reisadvies> getRA(String fromStation, String toStation, String viaStation, String dateTime, String departure, String hslAllowed, String yearCard) throws APIException{
    try{
        String uri = url(fromStation, toStation, viaStation, dateTime, departure, hslAllowed,yearCard);
        URL url = new URL(uri);
        HttpURLConnection uc = (HttpURLConnection) url.openConnection();
        if (!url.getHost().equals(uc.getURL().getHost())) {
            throw new APIException("HotspotForwadingActive");
        }
        String basicAuth = "Basic " + "username:password"; //base64 encoded
        uc.setRequestProperty ("Authorization", basicAuth);
        uc.connect();
        BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream(), "UTF-8"));
        try{
            return (ArrayList<Reisadvies>) new XMLParser().parseRP(in);
        }finally{
            uc.connect();
        }
    }catch (Exception e){
        e.printStackTrace();
        throw new APIException(e.getMessage());
    }
}

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Я думаю, что есть проблема в doInBackground:

pd.dismiss();

Операции с элементом пользовательского интерфейса можно выполнять только в потоке пользовательского интерфейса. Это означает, что вы можете сделать это в методе onPostExecute или, если хотите, можете использовать метод runOnUiThread:

runOnUiThread(new Runnable() {
    public void run() {
        pd.dismiss();
    }
});

Надеюсь, это полезно ...

0 голосов
/ 07 октября 2011

Вы тоже правы, но проблема была в другом.Просто узнал, что это было для урленкодинга.Должен был понять это сразу, но был сбит с толку тем, что иногда он работал с пробелом:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...