2015-08-25 15 views
8

Sau khi thêm các thay đổi sau vào build.gradle ngay sau khi cập nhật lên cấp API Android mới nhất 23 (Marshmallow), tất cả các lớp org.apache.http không hoạt động.gói org.apache.http bị xóa ở cấp API 23. Phương án thay thế là gì?

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.0" 

    defaultConfig { 
     applicationId "com.myapp.package" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 2 
     versionName "1.1" 
    } 
} 

Tôi đã kiểm tra "Báo cáo khác biệt về API Android" here. Nó nói rằng tất cả các lớp của org.apache.http đã bị loại bỏ. Ai đó có thể đề xuất thay thế là gì?

Đây là mã của tôi:

try { 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(address); 

      httpPost.setEntity(new StringEntity("{\"longUrl\":\""+longUrl+"\"}")); 
      httpPost.setHeader("Content-Type", "application/json"); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 

      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

HttpClient đã không được chấp nhận trong Android L, vì vậy tôi khuyên bạn nên sử dụng HttpURLConnection – user3641702

Trả lời

15

Xem Behavior Changes tại Nhà phát triển Android mà nó nói rằng:

Android phiên bản 6.0 loại bỏ hỗ trợ cho khách hàng Apache HTTP. Nếu ứng dụng của bạn đang sử dụng ứng dụng khách này và nhắm mục tiêu Android 2.3 (API cấp 9) trở lên, thay vào đó, hãy sử dụng lớp HttpURLConnection thay vào đó, . API này hiệu quả hơn vì nó giảm sử dụng mạng thông qua nén trong suốt và bộ nhớ đệm phản hồi và giảm thiểu mức tiêu thụ điện năng. Để tiếp tục sử dụng các API Apache HTTP, trước tiên bạn phải khai báo sự phụ thuộc thời gian biên dịch sau đây trong tập tin build.gradle của bạn:

android { 
    useLibrary 'org.apache.http.legacy' 
} 
+0

Gradle dường như không nhận ra 'useLibrary'. Lỗi dưới đây: Không tìm thấy phương thức DSL Gradle: 'useLibrary()' – techierishi

+6

@Techierishi: Đảm bảo rằng bạn đang sử dụng phiên bản 1.3.0 của plugin Gradle dành cho Android. – CommonsWare

+0

Tôi đã thêm useLibrary nhưng tôi vẫn nhận được trong này "Không thể tìm thấy thư viện tùy chọn: org.apache.http.legacy" lỗi trong xây dựng của tôi? – umerk44

0

Vui lòng tham khảo this. Phương án thay thế class được đề cập trong trang Android Developer.

Lớp org.apache.http và lớp android.net.http.AndroidHttpClient đã không được chấp nhận trong Android 5.1. Các lớp này không còn được duy trì và bạn nên di chuyển bất kỳ mã ứng dụng nào bằng cách sử dụng các API này sang các lớp URLConnection càng sớm càng tốt.

Các vấn đề liên quan