getPreferences in AsyncTask

  • 3 Antworten
  • Letztes Antwortdatum
Linux4ever

Linux4ever

Fortgeschrittenes Mitglied
27
Hallo und guten Abend,

ich habe einen AsyncTask der Daten via Internet herunterlädt. Diese werden anschließend in eine Tabelle eingetragen (dynamisch). Wenn eine bestimmte TextView in der Tabelle geklickt wird, soll via deren ID der Text geholt werden und dieser Text ist dann der Key für die Preference. Jedoch erhalte ich immer den Defaultwert zurück.

Code:
TextView tv11 = new TextView(context);
                    tv11.setId((int) (Math.random() * 1000000000));
                    tv11.setText(nameList.item(3).getTextContent()); // Aus XML-String
                    tv11.setBackgroundResource(R.drawable.cell_shape);
                    tv11.setPadding(4, 0, 4, 0);
                    if (nameList.item(2).getTextContent().contains("x"))
                    {
                        tv11.setBackgroundResource(R.drawable.cell_shape_red);
                    }
                    
                    tv11.setOnClickListener(new OnClickListener() 
                    {
                        @Override
                        public void onClick(View v)
                        {
                            int id = v.getId();
                            String teacher = ((TextView) view.findViewById(id)).getText().toString(); // Abkürzung des Lehrers, meist zwei Buchstaben
                            
                            if ((!teacher.equals("---")) && (!teacher.equals("")))
                            {
                                SharedPreferences sharedTeachers = context.getSharedPreferences("teachers", 0);
                                String fullName = sharedTeachers.getString(teacher, "Hoppla, nicht gefunden...");
                                Toast.makeText(context, teacher + ": " + fullName, Toast.LENGTH_LONG).show();
                            }
                        }
                    });
Code:
<resources>
    <string name="kürzel">Voller Name</string>
    <string name="Mü">Hr. Müller</string>
    <string name="Ma">Hr. Maier</string>
    
</resources>
Ich habe bereits davor in dem AsyncTask mehrfach auch eine andere Preference-Datei zugegriffen, dies funktioniert jedoch einwandfrei.

Aufruf des AsyncTask:
Code:
DownloadTask download = new DownloadTask(container.getContext(), day, tblLayout, rootView);
                    download.execute((Void) null);
Weiß jemand, wieso dies plötzlich nicht mehr funktioniert? Der einzige Unterschied zur anderen Prefs-Datei ist, das die teachers-Datei nur an dieser einzigen Stelle verwendet wird. Die andere Prefs-Datei wird querbeet in mehreren Activitys verwendet und funktioniert einwandfrei...

Danke im Voraus,
L4E
 
Der einzige Unterschied zur anderen Prefs-Datei ist, das die teachers-Datei nur an dieser einzigen Stelle verwendet wird

Ich vermute mal, dass du SharedPreferences mit String Resources verwechselst.

Denn wenn dein geposteter Code wirklich die einzige Stelle ist, wo du diese SharedPreferences-Datei verwendest, ist logisch, dass da nichts drin steht, weil du vorher ja nirgends etwas reinschreibst ;)

String-Resources liest du mit Context#getString
 
Ich habe in dem Projekt eine XML-Datei angelegt mit den Werten... Reicht dies nicht? Sobald ich zuhause bin, werde ich getString mal ausprobieren... Danke!
 
So, dank Zoopa habe ich es gelöst...

Lösung:

Code:
int id = v.getId();
                            String teacher = ((TextView) view.findViewById(id)).getText().toString();
                            
                            if ((!teacher.equals("---")) && (!teacher.equals("")))
                            {
                                int resourceId = context.getResources().getIdentifier(teacher, "string", context.getPackageName());
                                String fullName;
                                if (resourceId != 0)
                                {
                                    fullName = context.getString(resourceId);
                                }
                                else
                                {
                                    fullName = "Hoppla, nicht gefunden...";
                                }
                                Toast.makeText(context, fullName, Toast.LENGTH_LONG).show();
                            }

GELÖST!
 
Zurück
Oben Unten