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

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

Войти
Регистрация
Восстановить пароль
 
Molyakos
0 / 0 / 0
Регистрация: 08.09.2015
Сообщений: 31
#1

Установка ресурсов от строки - Android

06.01.2016, 11:12. Просмотров 174. Ответов 2
Метки нет (Все метки)

Есть у меня главное активити:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends AppCompatActivity {
 
    private static ImageView actionBarWifi;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        StatusBarControl sbc = new StatusBarControl();
        sbc.updateWifiDrawable(this);
        actionBarWifi = (ImageView)findViewById(R.id.wifiIcon);
 
    }
 
    public static void setWifiDrawable(Drawable drawable) {
        actionBarWifi.setVisibility(View.VISIBLE);
        actionBarWifi.setImageDrawable(drawable);
    }
}
Также есть второе активити, которое работает с установкой ресурсов:
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
public class StatusBarControl extends BroadcastReceiver {
    private static int wifiStrength;
    private ConnectivityManager connectivityManager;
    private WifiManager wifiManager;
 
    private void initManagers(Context context) {
        if (wifiManager == null) {
            wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        }
        if (connectivityManager == null) {
            connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        }
    }
 
    void updateWifiDrawable(Context context) {
        boolean flag = true;
        Object obj = null;
        initManagers(context);
        NetworkInfo networkinfo = connectivityManager.getActiveNetworkInfo();
        if (networkinfo == null || !networkinfo.isConnected()) {
            flag = false;
        }
        if (flag) {
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            int rssi = wifiManager.getConnectionInfo().getRssi();
            int wifiStrength = WifiManager.calculateSignalLevel(rssi, 5);
 
            obj = (new StringBuilder()).append("ic_signal_wifi_").append(wifiStrength).append("_bar_white_24dp").toString();
            obj = context.getResources().getDrawable(getResId(((String) (obj)), Drawable.class));
        }
        MainActivity.setWifiDrawable(((android.graphics.drawable.Drawable) (obj)));
    }
 
    public static int getResId(String resName, Class<?> c) {
 
        try {
            Field idField = c.getDeclaredField(resName);
            return idField.getInt(idField);
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }
 
    public void onReceive(Context context, Intent intent) {
        initManagers(context);
                Iterator iterator = wifiManager.getScanResults().iterator();
                do {
                    if (!iterator.hasNext()) {
                        break;
                    }
                    ScanResult scanresult = (ScanResult)iterator.next();
                        int i = WifiManager.calculateSignalLevel(wifiManager.getConnectionInfo().getRssi(), scanresult.level);
                        if (scanresult.level > 0) {
                            i = (i * 100) / scanresult.level;
                        } else {
                            i = 100;
                        } if (i >= 100) {
                            wifiStrength = 4;
                        } else if (i >= 80) {
                            wifiStrength = 3;
                        } else if (i >= 60) {
                            wifiStrength = 2;
                        } else if (i >= 40) {
                            wifiStrength = 1;
                        } else if (i >= 20) {
                            wifiStrength = 0;
                        }
                } while (true);
            updateWifiDrawable(context);
        }
    }
Но вылезает ошибка NoSuchFieldException, а в последствии и NotFoundException, хотя файл существует, лежит в папке Drawable. Логи:
Кликните здесь для просмотра всего текста

01-06 14:01:41.916 3709-3709/? W/System.err: java.lang.NoSuchFieldException: ic_signal_wifi_4_bar_white_24dp
01-06 14:01:41.916 3709-3709/? W/System.err: at java.lang.Class.getDeclaredField(Class.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at com.example.sergey.mywifi.StatusBarControl.getResId(StatusBarControl.java:51)
01-06 14:01:41.916 3709-3709/? W/System.err: at com.example.sergey.mywifi.StatusBarControl.updateWifiDrawable(StatusBarControl.java:43)
01-06 14:01:41.916 3709-3709/? W/System.err: at com.example.sergey.mywifi.MainActivity.onCreate(MainActivity.java:18)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.app.Activity.performCreate(Activity.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.app.ActivityThread.access$600(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.os.Looper.loop(Looper.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
01-06 14:01:41.916 3709-3709/? W/System.err: at java.lang.reflect.Method.invoke(Method.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
01-06 14:01:41.916 3709-3709/? W/System.err: at dalvik.system.NativeStart.main(Native Method)
01-06 14:01:41.916 3709-3709/? W/ResourceType: No known package when getting value for resource number 0xffffffff
01-06 14:01:41.916 3709-3709/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4104bba0)
01-06 14:01:41.916 710-787/? E/EmbeddedLogger: App crashed! Process: com.example.sergey.mywifi
01-06 14:01:41.916 710-787/? E/EmbeddedLogger: App crashed! Package: com.example.sergey.mywifi v1 (1.0)
01-06 14:01:41.916 710-787/? E/EmbeddedLogger: Application Label: mywifi


01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: FATAL EXCEPTION: main
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sergey.mywifi/com.example.sergey.mywifi.MainActivity}: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.content.res.Resources.getValue(Resources.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.content.res.Resources.getDrawable(Resources.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at com.example.sergey.mywifi.StatusBarControl.updateWifiDrawable(StatusBarControl.java:43)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at com.example.sergey.mywifi.MainActivity.onCreate(MainActivity.java:18)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)*
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)*
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java)*
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java)*
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java)*
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java)*
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java)*
01-06 14:01:41.916 3709-3709/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)*

Вроде все по инструкции. Укажите, пожалуйста, на ошибки. Что не так?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2016, 11:12     Установка ресурсов от строки
Посмотрите здесь:

Android смена ресурсов
Получить массив из ресурсов Android
Android Хранение ресурсов
Android Обращение к файлу ресурсов
Взять массив из ресурсов Android
Android Сравнение строковых ресурсов
Android Загрузка нужных ресурсов
Использование стандартных ресурсов Android
Android Использование ресурсов в jar
Получить картинку из ресурсов Android
Android Использование ресурсов классами
Android Загрузка ресурсов из модуля

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,215
Завершенные тесты: 1
06.01.2016, 11:46     Установка ресурсов от строки #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
drawable по имени можно вытянуть так
Java
1
2
        int id = context.getResources().getIdentifier("drawable_name", "drawable", context.getPackageName());
        Drawable drawable = ContextCompat.getDrawable(context, id);
context - это ссылка на активити
Molyakos
0 / 0 / 0
Регистрация: 08.09.2015
Сообщений: 31
07.01.2016, 10:28  [ТС]     Установка ресурсов от строки #3
Паблито, хм, Вы хотите сказать вот так:
Java
1
2
3
int id = context.getResources().getIdentifier(String.valueOf(obj), "drawable", context.getPackageName());
Drawable drawable = ContextCompat.getDrawable(context, id);
setWifiDrawable(drawable);
что ли? Выкидывает по NullPointEx с данными у drawable - android.graphics.drawable.BitmapDrawable@4148b2b8, а у id - 2130837579 со строки передачи картинки setWifiDrawable(drawable);

Добавлено через 12 часов 28 минут
UPD заработал через (String) obj. Паблито, спасибо!
Yandex
Объявления
07.01.2016, 10:28     Установка ресурсов от строки
Ответ Создать тему
Опции темы

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