【问题标题】:Android AsyncTask with JSON Parsing and Basic Authentication具有 JSON 解析和基本身份验证的 Android AsyncTask
【发布时间】:2016-01-09 23:31:52
【问题描述】:

我有一个 Rest web 服务,服务也有一个基本身份验证。当我连接到服务器时,它要求我输入用户名和密码。之后,我访问一个 Web 服务返回一个关于 JsonArray 的用户。 (用户名、生日、年龄等)

我的目的是在显示 Textviews 时返回数据解析。我想使用 AsyncTask Http 请求。

你能举一些例子吗?谢谢。

【问题讨论】:

    标签: android android-asynctask basic-authentication


    【解决方案1】:
    class RequestTask extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... uri) {
            try {
                    postData(uri[0]);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
    
            return null;
        }
        @Override
        protected void onCancelled() {
            myTask2.cancel(true);
    
        }
        @Override
        protected void onPostExecute(String url) {
            LinearLayouts();
        }
    }
    
    public static String postData(String url) throws UnsupportedEncodingException {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httppost = new HttpGet(url);
        String responseString = "";
    
        try {
            HttpResponse response = httpclient.execute(httppost);
            StatusLine statusLine = response.getStatusLine();
            InputStream inputStream = null;
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                inputStream = response.getEntity().getContent();
                if(inputStream != null)
                    responseString = convertInputStreamToString(inputStream);
                else
                    responseString = "Did not work!";
                JSONObject reader = null;
                JSONArray sys  = null;
                try {
                    reader = new JSONObject(responseString);
                    String res_metar = reader.getString("YOUR TAG");
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                //a = responseString;
    
            } else{
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (ClientProtocolException e) {
    
        } catch (IOException e) {
    
            // process execption
        }
        return responseString;
    }
    
    private static String convertInputStreamToString(InputStream inputStream) throws IOException{
        BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while((line = bufferedReader.readLine()) != null)
            result += line;
    
        inputStream.close();
        return result;
    
    }
    

    你应该把它写在班上。

    private static RequestTask myTask2;
    

    并将其添加到您的主要活动中,

    myTask2=(RequestTask)new RequestTask().execute(url);
    

    【讨论】:

      【解决方案2】:

      alican 已经提到过异步任务。

      查看Error "HTTP/1.1 401 Unauthorized" with basic authentication in android - EWS 2010,其中包含基本身份验证所需的信息

      【讨论】:

      • 好的,我了解使用AsyncTask但是我不知道如何使用Basic Authentication,示例是混合的。
      • 以上链接中有以下几行: UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(user, pass); Header header = new BasicScheme().authenticate(credentials, mHttpRequest); mHttpRequest.addHeader(header);
      猜你喜欢
      • 2014-04-24
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多