Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
BeutiFul BiTcH
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 20
#1

Добавление библиотеки - Android

20.02.2016, 01:50. Просмотров 672. Ответов 5
Метки нет (Все метки)

Добрый вечер!
Возникла проблема при добавлении в проект библиотек:
org.apache.http. … (org.apache.http.Header, org.apache.http.HttpEntity, org.apache.http.HttpHost, org.apache.http.HttpResponse …)

org.apache.http.client. … (org.apache.http.client.ClientProtocolException, org.apache.http.client.HttpClient, org.apache.http.client.ResponseHandler …)

“Гугл” советует изменить build.grable, но мои эксперименты не завершились успехом
Error: (23, 23) error: cannot find symbol class Header
Error: (24, 23) error: cannot find symbol class HttpHost
Error: (25, 23) error: cannot find symbol class HttpResponse
Error: (26, 38) error: package org.apache.http.client.methods does not exist

Помогите пожалуйста советом как решить проблему
Вот содержимое build.grable:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
apply plugin: 'com.android.application'
android {
    signingConfigs {
        …
    }
    compileSdkVersion 23
    buildToolsVersion '23.0.0'
    defaultConfig {
        …
        minSdkVersion 15
        targetSdkVersion 23
        …
        signingConfig signingConfigs.config
    }
    buildTypes {
        release {
          …
        }
    }
    productFlavors {
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.google.android.gms:play-services:8.4.0'
    compile 'org.apache.httpcomponents:httpclient:4.5'
    compile 'com.android.support:design:23.0.0'
}
Добавлено через 53 минуты
В статье про Android 6.0 (API level 23) сказано добавить в build.grable:
Java
1
2
3
android {
    useLibrary 'org.apache.http.legacy'
}
Получаю ошибку:
Error: (13, 0) Gradle DSL method not found: 'useLibrary()'
Possible causes:<ul><li>The project 'XXX' may be using a version of the Android Gradle plug-in that does not contain the method (e.g. 'testCompile' was added in 1.1.0).
<a href="fixGradleElements">Fix plugin version and sync project</a></li><li>The project 'ХХХ' may be using a version of Gradle that does not contain the method.
<a href="open.wrapper.file">Open Gradle wrapper file</a></li><li>The build file may be missing a Gradle plugin.
<a href="apply.gradle.plugin">Apply Gradle plugin</a></li>


Добавлено через 59 минут
Клик по Fix plugin version and sync project помог с добавлением библиотеки, но сразу же появилась новая проблема с переходом на API 23 - Notifications:
This release removes the Notification.setLatestEventInfo() method. Use the Notification.Builder class instead to construct notifications. To update a notification repeatedly, reuse the Notification.Builder instance. Call the build() method to get updated Notification instances.
The adb shell dumpsys notification command no longer prints out your notification text. Use the adb shell dumpsys notification --noredact command instead to print out the text in a notification object.


Кто-то знает как использовать Notification.Builder вместо Notification.setLatestEventInfo()???

P.S.: Думаю уместней переименовать тему на «Проблемы после обновления до API 23»

Добавлено через 39 минут
Сама спросила – сама отвечу, вдруг кому-то пригодится. Как уже было сказано с AIP23 метод .setLatestEventInfo удален.
com.google.android.vending.expansion.downloader.impl.DownloadNotification использует данный метод целых два раза. Если вам нужно юзать файлы дополнений в своем приложении(поддержка obb архивов), замените содержимое com.google.android.vending.expansion.downloader.impl.DownloadNotification на следующий код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
package com.google.android.vending.expansion.downloader.impl;
 
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.os.Build;
import android.os.Messenger;
 
import com.google.android.vending.expansion.downloader.DownloadProgressInfo;
import com.google.android.vending.expansion.downloader.DownloaderClientMarshaller;
import com.google.android.vending.expansion.downloader.Helpers;
import com.google.android.vending.expansion.downloader.IDownloaderClient;
 
import com.android.vending.expansion.downloader.R;
/**
 * This class handles displaying the notification associated with the download
 * queue going on in the download manager. It handles multiple status types;
 * Some require user interaction and some do not. Some of the user interactions
 * may be transient. (for example: the user is queried to continue the download
 * on 3G when it started on WiFi, but then the phone locks onto WiFi again so
 * the prompt automatically goes away)
 * <p/>
 * The application interface for the downloader also needs to understand and
 * handle these transient states.
 */
public class DownloadNotification implements IDownloaderClient {
 
    private int mState;
    private final Context mContext;
    private final NotificationManager mNotificationManager;
    private String mCurrentTitle;
 
    private IDownloaderClient mClientProxy;
    final ICustomNotification mCustomNotification;
    private Notification.Builder mNotificationBuilder;
    private Notification.Builder mCurrentNotificationBuilder;
    private CharSequence mLabel;
    private String mCurrentText;
    private PendingIntent mContentIntent;
    private DownloadProgressInfo mProgressInfo;
 
    static final String LOGTAG = "DownloadNotification";
    static final int NOTIFICATION_ID = LOGTAG.hashCode();
 
    public PendingIntent getClientIntent() {
        return mContentIntent;
    }
 
    public void setClientIntent(PendingIntent mClientIntent) {
        this.mContentIntent = mClientIntent;
    }
 
    public void resendState() {
        if (null != mClientProxy) {
            mClientProxy.onDownloadStateChanged(mState);
        }
    }
 
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onDownloadStateChanged(int newState) {
        if (null != mClientProxy) {
            mClientProxy.onDownloadStateChanged(newState);
        }
        if (newState != mState) {
            mState = newState;
            if (newState == IDownloaderClient.STATE_IDLE || null == mContentIntent) {
                return;
            }
            int stringDownloadID;
            int iconResource;
            boolean ongoingEvent;
 
            // get the new title string and paused text
            switch (newState) {
                case 0:
                    iconResource = android.R.drawable.stat_sys_warning;
                    stringDownloadID = R.string.state_unknown;
                    ongoingEvent = false;
                    break;
 
                case IDownloaderClient.STATE_DOWNLOADING:
                    iconResource = android.R.drawable.stat_sys_download;
                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
                    ongoingEvent = true;
                    break;
 
                case IDownloaderClient.STATE_FETCHING_URL:
                case IDownloaderClient.STATE_CONNECTING:
                    iconResource = android.R.drawable.stat_sys_download_done;
                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
                    ongoingEvent = true;
                    break;
 
                case IDownloaderClient.STATE_COMPLETED:
                case IDownloaderClient.STATE_PAUSED_BY_REQUEST:
                    iconResource = android.R.drawable.stat_sys_download_done;
                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
                    ongoingEvent = false;
                    break;
 
                case IDownloaderClient.STATE_FAILED:
                case IDownloaderClient.STATE_FAILED_CANCELED:
                case IDownloaderClient.STATE_FAILED_FETCHING_URL:
                case IDownloaderClient.STATE_FAILED_SDCARD_FULL:
                case IDownloaderClient.STATE_FAILED_UNLICENSED:
                    iconResource = android.R.drawable.stat_sys_warning;
                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
                    ongoingEvent = false;
                    break;
 
                default:
                    iconResource = android.R.drawable.stat_sys_warning;
                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
                    ongoingEvent = true;
                    break;
            }
            mCurrentText = mContext.getString(stringDownloadID);
            mCurrentTitle = mLabel.toString();
            mCurrentNotificationBuilder.setTicker(mLabel + ": " + mCurrentText);
            mCurrentNotificationBuilder.setSmallIcon(iconResource);
            mCurrentNotificationBuilder.setContentTitle(mCurrentTitle);
            mCurrentNotificationBuilder.setContentText(mCurrentText);
            mCurrentNotificationBuilder.setContentIntent(mContentIntent);
            mCurrentNotificationBuilder.setOngoing(ongoingEvent);
            mCurrentNotificationBuilder.setAutoCancel(!ongoingEvent);
            mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotificationBuilder.build());
        }
    }
 
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onDownloadProgress(DownloadProgressInfo progress) {
        mProgressInfo = progress;
        if (null != mClientProxy) {
            mClientProxy.onDownloadProgress(progress);
        }
        if (progress.mOverallTotal <= 0) {
            // we just show the text
            mNotificationBuilder.setTicker(mCurrentTitle);
            mNotificationBuilder.setSmallIcon(android.R.drawable.stat_sys_download);
            mNotificationBuilder.setContentTitle(mCurrentTitle);
            mNotificationBuilder.setContentText(mCurrentText);
            mNotificationBuilder.setContentIntent(mContentIntent);
            mCurrentNotificationBuilder = mNotificationBuilder;
        } else {
            mCustomNotification.setCurrentBytes(progress.mOverallProgress);
            mCustomNotification.setTotalBytes(progress.mOverallTotal);
            mCustomNotification.setIcon(android.R.drawable.stat_sys_download);
            mCustomNotification.setPendingIntent(mContentIntent);
            mCustomNotification.setTicker(mLabel + ": " + mCurrentText);
            mCustomNotification.setTitle(mLabel);
            mCustomNotification.setTimeRemaining(progress.mTimeRemaining);
            mCurrentNotificationBuilder = mCustomNotification.updateNotification(mContext);
        }
        mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotificationBuilder.build());
    }
 
    public interface ICustomNotification {
        void setTitle(CharSequence title);
 
        void setTicker(CharSequence ticker);
 
        void setPendingIntent(PendingIntent mContentIntent);
 
        void setTotalBytes(long totalBytes);
 
        void setCurrentBytes(long currentBytes);
 
        void setIcon(int iconResource);
 
        void setTimeRemaining(long timeRemaining);
 
        Notification.Builder updateNotification(Context c);
    }
 
    /**
     * Called in response to onClientUpdated. Creates a new proxy and notifies
     * it of the current state.
     *
     * @param msg the client Messenger to notify
     */
    public void setMessenger(Messenger msg) {
        mClientProxy = DownloaderClientMarshaller.CreateProxy(msg);
        if (null != mProgressInfo) {
            mClientProxy.onDownloadProgress(mProgressInfo);
        }
        if (mState != -1) {
            mClientProxy.onDownloadStateChanged(mState);
        }
    }
 
    /**
     * Constructor
     *
     * @param ctx The context to use to obtain access to the Notification
     *            Service
     */
    DownloadNotification(Context ctx, CharSequence applicationLabel) {
        mState = -1;
        mContext = ctx;
        mLabel = applicationLabel;
        mNotificationManager = (NotificationManager)
                mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        mCustomNotification = CustomNotificationFactory
                .createCustomNotification();
        mNotificationBuilder = new Notification.Builder(ctx);
        mCurrentNotificationBuilder = mNotificationBuilder;
 
    }
 
    @Override
    public void onServiceConnected(Messenger m) {
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2016, 01:50     Добавление библиотеки
Посмотрите здесь:

Использование C# библиотеки в java android Android
Android Использование сторонней библиотеки
Библиотеки/классы обработки мультитатча Android
Android Вынести классы ядра в библиотеки
Android Http библиотеки
Загрузка нативной библиотеки Android
Android Использование библиотеки (so) в исходниках на с++ с ndk
Android Подключаемые библиотеки в Android Studio
Unit test библиотеки Android
Ответ с библиотеки ksoap2 Android
Android Библиотеки поддержки
Android Добавление сторонней библиотеки

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
20.02.2016, 13:59     Добавление библиотеки #2
BeutiFul BiTcH, добрый день!
Тоже недавно начал работать с данной библиотекой, которая уже устарела (использую чужой проект). Тоже столкнулся с 23 версией API. Интересно, а зачем вам сейчас поднимать это барахло, если есть другие библиотеки?
BeutiFul BiTcH
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 20
22.02.2016, 17:38  [ТС]     Добавление библиотеки #3
Я бы с радостью использовала другие библиотеки, но когда мне нужно было реализовать интерфейс работы с файлами дополнений, примеры которые я нашла, использовали только ее.
CoolMind, если у вас есть нормальные рабочие примеры по работе других библиотек, скиньте пожалуйста ссылку.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
24.02.2016, 12:25     Добавление библиотеки #4
BeutiFul BiTcH, всё зависит от задания. Я так понял, вам нужно скачивать файлы. Для этого можно помучаться со стандартным DownloadManager'ом (http://blog.vogella.com/2011/06/14/a...nager-example/). Он позволяет качать файлы и отображать процесс в верхней шторке. По окончании делает обратный вызов. Можно во время скачивания переименовать файл.
Если требуется работа с HTTP, то обычно рекомендуют Retrofit, OkHTTP. Я работал с HttpURLConnection, там приходится прописывать всю логику, а это сложнее, чем AsyncHttpClient.
BeutiFul BiTcH
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 20
24.02.2016, 20:00  [ТС]     Добавление библиотеки #5
CoolMind, спасибо. На данный момент мне нужно реализовать только скачивание, но думаю, в скором времени, будет необходимость реализовать клиент-серверную логику работы приложения.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
25.02.2016, 01:12     Добавление библиотеки #6
BeutiFul BiTcH, не за что, уважаемая! Обращайтесь.
Yandex
Объявления
25.02.2016, 01:12     Добавление библиотеки
Ответ Создать тему
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru