2017-01-11 3 views
0

Ich bin ein wenig sprachlos.
Ich habe Aktivität A und B. Wenn ich in B bin und bekommen das Verfahren deleteItemOption(much input) dann die Toast meine Anwendung abstürzt: DgetText (R.string.really) .tostring() funktioniert nicht in einem Toast

wenn ich die Methode in Aktivität öffnen Ein alles in Ordnung ist. Aber ich brauche die Methode in Aktivität A und B, also habe ich die Methode global programmiert, aber der Toast ist ein bisschen eklig: D

in der .setpositiveButton gibt es einen Toast. Warum das Toast meine App abstürzen, wenn da steht:

Toast.makeText(context, getText(R.string.deleted).toString(), Toast.LENGTH_LONG).show(); 

oder:

Toast.makeText(context, getString(R.string.deleted), Toast.LENGTH_LONG).show(); 

aber dies funktioniert:

Toast.makeText(context, "deleted", Toast.LENGTH_LONG).show(); 

EDIT: Auch fand ich heraus, dass dies funktioniert:

public void deleteItemOption(.... ,final String toast2, ....){ 
... 
    Toast.makeText(context, toast2, Toast.LENGTH_LONG).show(); 
... 
} 

I erhält meinen Kontext von dort:

public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.deleteHersteller: 
       ListView listViewDelete = (ListView) findViewById(R.id.listViewHersteller); 
       String toast2 = getText(R.string.deleteSuccesfully).toString(); 
       deleteItemOption(Hersteller.this, listViewDelete, getText(R.string.takeHersteller).toString(), toast2 , mainFolder, getText(R.string.hersteller).toString(), getText(R.string.really).toString()); 
       return true; 
     } 
     return true; 

Der Code in der Klasse A:

public void deleteItemOption(final Context context, ListView listView, String toast, final String folder, final String title, final String really){ 
     Toast.makeText(context, toast, Toast.LENGTH_LONG).show(); 
     final ListView listViewDelete = listView; 
     listViewDelete.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { 
       final AlertDialog.Builder builder = new AlertDialog.Builder(context); 
       final String deleteName = listViewDelete.getItemAtPosition(position).toString(); 
       builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         deleteFolder(folder + deleteName); 
         setContent(context, folder, listViewDelete); 
         //this Toast chrash the app 
         Toast.makeText(context, getText(R.string.really).toString(), Toast.LENGTH_LONG).show(); 
         //recreate(); 
         /* würde gut funktionieren wenn man den ganzen Code überall in jeder activity stehen hat aber da ich 
         global eine Methode gemacht habe, geht das recreate() nicht*/ 

        } 
       }) 
         .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           //recreate(); 
           return; 
          } 
         }); 
       AlertDialog alertDialog = builder.create(); 
       String titleString = title+" '"+deleteName+"' "+really; 
       alertDialog.setTitle(titleString); 
       alertDialog.show(); 
      } 
     }); 


    } 

string.xml

<resources> 

    <string name="deleteGeschoss">Geschoss löschen</string> 
    <string name="deleteGeschossQuestion">Geschoss wirklich löschen?</string> 
    <string name="deleted">Löschen erfolgreich</string> 

</resources> 

Es wird die Logcat:

E/Android Runtime : FATALE AUSNAHME: Haupt Prozess: com.beispiel.niklas.wiederladen, PID: 1549 java.lang.NullPointerException: Es wurde versucht, die virtuelle Methode 'android.content.res.Resources android.content.Context.getResources()' für eine Nullobjektreferenz aufzurufen bei android.content.ContextWrapper.getResources (ContextWrapper.java:86) bei android.view.ContextThemeWrapper.getResources (ContextThemeWrapper.java:74) bei android.content.Context.getString (Context.java:377) um com.example.myname.myappname.Hersteller $ 4 $ 2.onClick (Hersteller.java:251) um android.support. v7.app.AlertController $ ButtonHandler.handleMessage (AlertController.java:153) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:211) bei android.app.ActivityThread.main (ActivityThread.java:5389) bei java.lang.reflect.Method.invoke (native Methode) bei java.lang.reflect.Method.invoke (Method.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1020) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 815)

+0

Die Zeichenkette ist in string.xml definiert, ich habe vergessen, dies zu schreiben^_^ – Niklas

+0

Wohin gehen Sie in Ihrem 'Context'? Es ist null. – Pztar

+0

Ich lege es oben in, wo ich meinen Kontext herbekomme. 'Hersteller.this' ist der Name der Klasse – Niklas

Antwort

2

Try this:

Toast.makeText(context, R.string.deleted, Toast.LENGTH_SHORT).show(); 

Die Dokumentation auf Toast sagt, dass Sie kann resId direkt übergeben, anstattaufzurufen 210.

+0

verdammt danke, das funktioniert gut – Niklas

0

Versuchen:

getResources().getString(R.string.your_string); 

sicher sein, dass your_string

in Ihrer stirng.xml-Datei definiert ist
+0

ja die Zeichenkette ist in string.xml definiert, ich habe vergessen zu schreiben^_^ es hat nicht funktioniert, selbe Logcat Fehler – Niklas

+0

Können Sie mir sagen, welche Zeile von Code ist der Fehler, der sich auch auf Ihr Logcat bezieht? Können Sie Ihre string.xml auch teilen? –

+0

überprüfen Sie auch meine bearbeitete Antwort .. Verwenden Sie getString() statt getText() .. wenn es immer noch Null ist, als etwas in Ihrer string.xml falsch ist –

Verwandte Themen