Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android httpurlconnection和基本身份验证_Android_Http_Android Asynctask_Basic Authentication_Httpurlconnection - Fatal编程技术网

Android httpurlconnection和基本身份验证

Android httpurlconnection和基本身份验证,android,http,android-asynctask,basic-authentication,httpurlconnection,Android,Http,Android Asynctask,Basic Authentication,Httpurlconnection,我真的很难对付虫子。使用的Api是v11,蜂巢3.0 我有一个asynctask在一个片段中,该片段通过基本身份验证从XMLAPI下载。即使我用EditText等更改了片段内的参数,它也能很好地工作。但是当我尝试从片段外变异autocompletetextview时,突然我得到了一个“第1行无元素。第0列”异常。我尝试了androidhttpclient,摆弄了systemprop(http.keepalive),并将其完全缩小到这个方法 public void setStations(Stri

我真的很难对付虫子。使用的Api是v11,蜂巢3.0 我有一个asynctask在一个片段中,该片段通过基本身份验证从XMLAPI下载。即使我用EditText等更改了片段内的参数,它也能很好地工作。但是当我尝试从片段外变异autocompletetextview时,突然我得到了一个“第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());
    }
}
class LoadDataTask扩展了AsyncTask{
私人例外;
私营部门;
受保护的void onPreExecute(){
//加载进度对话框
}
受保护的ArrayList doInBackground(字符串…参数){
试一试{
ex=null;
返回新的APIreader().getRA(参数[0]、参数[1]、参数[2]、参数[3]、参数[4]、参数[5]、参数[6]);
}捕获(例外e){
取消(真);
pd.解散();
ex=e;
返回null;
}
}
PostExecute上受保护的void(ArrayList ra){
//将列表发送到活动
}
受保护的void onCancelled(){
super.onCancelled();
淋浴器(ex);
}
}  
};
公共数组列表getRA(字符串fromStation、字符串toStation、字符串viaStation、字符串dateTime、字符串离开、字符串hslAllowed、字符串yearCard)抛出异常{
试一试{
字符串uri=url(fromStation、toStation、viaStation、dateTime、出发、hslAllowed、yearCard);
URL=新的URL(uri);
HttpURLConnection uc=(HttpURLConnection)url.openConnection();
如果(!url.getHost().equals(uc.getURL().getHost())){
抛出新的APIException(“HotspotForwadingActive”);
}
字符串basicAuth=“Basic”+“用户名:密码”///base64编码
uc.setRequestProperty(“授权”,basicAuth);
uc.connect();
BufferedReader in=新的BufferedReader(新的InputStreamReader(uc.getInputStream(),“UTF-8”);
试一试{
返回(ArrayList)新的XMLParser().parseRP(in);
}最后{
uc.connect();
}
}捕获(例外e){
e、 printStackTrace();
抛出新的APIException(例如getMessage());
}
}

我认为在后台工作中存在一个问题:

pd.dismiss();
只能在UI线程中对UI元素执行操作。这意味着您可以在onPostExecute方法中执行此操作,或者,如果需要,可以使用runOnUiThread方法:

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

我希望这是有帮助的…

你在这一点上也是对的,但问题是不同的。刚发现这是一个很好的方法。应该马上就想出来,但由于它有时在有空间的情况下工作,所以被抛弃了:)