2015-05-31 25 views
13

Tôi đang sử dụng API22 phòng thu android và tôi có các lỗi này:'org.apache.http.HttpEntity' không được chấp nhận. Làm thế nào để giải quyết lỗi này trong studio android?

'org.apache.http.HttpEntity' is deprecated 
'org.apache.http.HttpResponse' is deprecated 
'org.apache.http.NameValuePair' is deprecated 
'org.apache.http.client.HttpClient' is deprecated 
'org.apache.http.client.entity.UrlEncodedFormEntity' is deprecated 
'org.apache.http.client.methods.HttpPost' is deprecated 
'org.apache.http.impl.client.DefaultHttpClient' is deprecated 
'org.apache.http.message.BasicNameValuePair' is deprecated 
'org.apache.http.params.BasicHttpParams' is deprecated 
'org.apache.http.params.HttpConnectionParams' is deprecated 
'org.apache.http.params.HttpParams' is deprecated 
'org.apache.http.util.EntityUtils' is deprecated 

Làm thế nào tôi có thể giải quyết này?

+2

Nó không phải là lỗi. Đó là cảnh báo. Bạn nên đọc tài liệu. Phải có gợi ý mà bạn nên sử dụng lớp – Jens

+0

có 4 gợi ý: – Sml

+0

kiểm tra tùy chọn 'Sử dụng API không được chấp nhận': chỉnh sửa cài đặt hồ sơ kiểm tra và lớp Chú thích 'HttpEntity' thành @Deprecated: chỉnh sửa cài đặt ý định. Tôi nên chọn tùy chọn nào ?? tôi thực sự không có ý tưởng những gì họ có nghĩa là – Sml

Trả lời

7

Trích dẫn myself:

Nếu bạn cần phải tiếp tục sử dụng các API HttpClient, hãy xem xét chuyển sang OkHttp và HttpClient lớp tương thích của họ, hoặc xem xét chuyển sang Apache’s separate Android edition of HttpClient. Nếu không, hãy chuyển sang HttpURLConnection hoặc API gốc của OkHttp.

Hoặc, tùy thuộc vào những gì bạn đang sử dụng HttpClient, sử dụng thư viện mạng cụ thể hơn (Trang bị thêm cho dịch vụ Web, Picasso hoặc Trình tải ảnh phổ quát cho hình ảnh, v.v.).

Cũng lưu ý rằng HttpClient bị xóa khỏi SDK cho Bản xem trước dành cho nhà phát triển M, cho biết rằng nó sẽ bị xóa trong phiên bản tiếp theo của Android. Trong khi có a workaround to continue using HttpClient in M, bạn thực sự cần phải chuyển sang một thứ khác.

+0

là có một sự thay thế đơn giản cho những lớp học trong API? – Sml

+0

@lamriassia: Tôi không biết bạn sẽ xem xét "đơn giản" và những gì bạn cho là "trong API". Tôi đã liệt kê một số thay thế trong câu trả lời của tôi (API HttpClient của OkHttp, HttpClient thay thế của Apache, sử dụng trực tiếp OkHttp, HttpUrlConnection, Retrofit, Picasso và Universal Image Loader). Bạn sẽ phải quyết định cho chính mình cái nào, nếu có, trong số đó là "đơn giản" và cái nào, nếu có, là "trong API". – CommonsWare

+0

ok, cảm ơn rất nhiều – Sml

4

Phiên bản ứng dụng khách HTTP Apache được cung cấp trên kho Android là very very old.

Google Android 1.0 đã được phát hành với ảnh chụp Apache BETA trước của BETA. Để trùng với bản phát hành Android Apache HttpClient 4.0 API đầu tiên phải được đông lạnh sớm, trong khi nhiều giao diện và cấu trúc bên trong vẫn chưa được làm việc hoàn toàn. Khi Apache HttpClient 4.0 đã trưởng thành, dự án đã mong đợi Google kết hợp các cải tiến mã mới nhất vào cây mã của họ. Thật không may nó đã không xảy ra.

Nếu bạn không muốn chuyển sang một API mới, bạn có thể tự thêm một phiên bản mới hơn của thư viện Apache HttpClient vào dự án của bạn để thay thế cho phiên bản cũ NỮA trong Android SDK < 22.

Cách dễ nhất để thực hiện điều này khi nhắm mục tiêu SDK 23+ là sử dụng Apache HttpClient package for Android mới của Marek Sebera (như suggested by Apache), có khả năng hoạt động như một thay thế thả xuống. Chỉ cần thêm sự phụ thuộc sau đây để tập build.gradle của bạn (cập nhật số phiên bản nếu thích hợp):

compile "cz.msebera.android:httpclient:4.4.1.1"

và thay thế import org.apache.http.* với import cz.msebera.android.httpclient.* ở khắp mọi nơi trong dự án của bạn.

Lưu ý rằng nhiều lớp học từ thư viện cũ không còn được dùng nữa (ví dụ: HttpParams, ThreadSafeClientConnManager), vì vậy việc viết lại mã có lẽ sẽ là giải pháp tốt hơn.


Edit: Tôi tìm thấy một số trường hợp sử dụng đã nhận được ngoại lệ thời gian chờ khi đằng sau máy chủ proxy sau khi chúng tôi cập nhật vào Http khách hàng mới hơn. Vì mã có đầy đủ các cảnh báo không được chấp nhận ở khắp mọi nơi, chúng tôi quyết định rằng không đáng để nỗ lực khắc phục sự cố. Tôi khuyên bạn nên kiểm tra kỹ lưỡng trước khi cố gắng đưa điều này vào sản xuất.

Như đã đề cập trong câu trả lời khác, một giải pháp tốt hơn là để cắn đạn và chuyển sang một trong hai bản Android HttpUrlConnection, hoặc nếu không đáp ứng được nhu cầu của bạn, bạn có thể sử dụng thư viện OkHttp, đó là những gì HttpUrlConnectioninternally based upon anyway.

+2

Đây là tháng 12 năm 2015 và sau khi thêm 'cz.msebera.android.httpclient 4.4.1.1' vào ứng dụng build.gradle của tôi, Android Studio 1.5, sdk 23, cho biết' HttpParams, HttpConnectionParams, BasicHttpParams, HttpProtocolParams' và ' DefaultHttpClient' không được chấp nhận. Có vẻ như tôi sẽ phải recode tất cả mọi thứ từ đầu. –

17

Thêm phần này vào gradle bạn

useLibrary 'org.apache.http.legacy' 

Ví dụ

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.1" 
defaultConfig { 
    minSdkVersion 14 
    targetSdkVersion 23 
    versionCode 2 
    versionName "1.0.1" 
} 
buildTypes { 
    release { 
     debuggable false 
     signingConfig signingConfigs.releaseConfig 
     minifyEnabled true 
     shrinkResources true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    debugSigned { 
     debuggable true 
     signingConfig signingConfigs.releaseConfig 
    } 
    debug { 
     debuggable true 
    } 
} 
useLibrary 'org.apache.http.legacy' 
} 
+0

Phiên bản msebera là 1,1mb, khá chi phí cho một ứng dụng nhỏ. Phiên bản cũ là 297k. okhttp + jars tương thích tổng cộng 382kb - và sẽ khuyến khích chuyển sang một API hiện đại - nhưng lớp tương thích không bao gồm đủ các lớp cho tôi. – NeilS

3

HttpClient deperected từ android lollypop 5.1 (API 22): -
Nhưng chúng ta vẫn có thể sử dụng HttpClient bằng cách sử dụng đoạn mã sau trong Android studio: -
Goto app \ build.gradle tệp:

defaultConfig { 
     applicationId "com.XXXXX.XXX" 
     minSdkVersion 16 
     targetSdkVersion 23 
     ----------- 
     ----------- 

     useLibrary 'org.apache.http.legacy' 
    } 

[OR THAY THẾ]


Tải về và thêm HttpClient jar tập tin để dự án của bạn hoặc sử dụng okHttp.

0

Tải xuống tệp jar org.apache.http.legacy từ here.

Trong tập tin build.gradle, gõ đoạn mã sau

defaultConfig { 
     useLibrary 'org.apache.http.legacy' 
} 

Lưu file .jar tải về ở vị trí sau

./sdk/platforms/android-23/optional/(.jar file) 

Tôi đang sử dụng android-23 dưới nền tảng, nó phụ thuộc vào Cấp API bạn đang sử dụng. Nếu thư mục tùy chọn không tồn tại, hãy tạo thư mục tùy chọn và dán tệp .jar vào thư mục trước khi đồng bộ hóa dự án gradle.

0

Sử dụng sau phụ thuộc vào bạn Gradle

dependencies { 
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' 
} 
0

Thêm phần này vào gradle bạn

useLibrary 'org.apache.http.legacy' 

Ví dụ

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.1" 
defaultConfig { 
    minSdkVersion 14 
    targetSdkVersion 23 
    versionCode 2 
    versionName "1.0.1" 
} 
buildTypes { 
    release { 
     debuggable false 
     signingConfig signingConfigs.releaseConfig 
     minifyEnabled true 
     shrinkResources true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    debugSigned { 
     debuggable true 
     signingConfig signingConfigs.releaseConfig 
    } 
    debug { 
     debuggable true 
    } 
} 
useLibrary 'org.apache.http.legacy' 
} 

Thư viện này sẽ cho phép bạn sử dụng nó mà không có vấn đề, ít nhất Tôi đã không có bất kỳ vấn đề cho đến bây giờ với nó.

+0

Điều này Có vẻ như một bản sao chính xác câu trả lời của @bfacumat – Jens

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