2016-06-09 4 views
0

Ich habe eigentlich zwei Aktivitäten. Der erste ruft den anderen an, um ein Ergebnis zu erhalten.Aufruf Fragment Methode löst NullPointerException

Der startActivityForResult-Teil ist in Ordnung. Anfragecode und Ergebniscode sind in Ordnung.

Aber es wirft NullPointerException auf Context.getResources() und ich kann nicht verstehen, warum. Ich weiß, was diese Ausnahme bedeutet, aber in diesem speziellen Fall verstehe ich nicht.

Hier ist meine Quellcode:

Vor onCreate (in Klassenbereich)

ComponentsFragment componentsFragment; 

In onCreate

componentsFragment = new ComponentsFragment(); 

Auf Schaltfläche klicken Ereignis

Intent i = new Intent(ReportActivity.this, ManageComponentsActivity.class); 
i.putExtra("action", PICK_COMPONENT_REQUEST); 
startActivityForResult(i, PICK_COMPONENT_REQUEST); 

In der zweite

Aktivität
Toast.makeText(c, "*****activity started for result", Toast.LENGTH_LONG).show(); 

Component component = (Component) parent.getItemAtPosition(position); 

Toast.makeText(c, "****component : " + component.getName(), Toast.LENGTH_LONG).show(); 

Intent i = new Intent(); 
i.putExtra("component_name", component.getName()); 
setResult(RESULT_OK, i); 

finish(); 

In der ersten Aktivität - onActivityResult

if (requestCode == PICK_COMPONENT_REQUEST && resultCode == RESULT_OK) { 

    Toast.makeText(this, "*****on activity result", Toast.LENGTH_LONG).show(); 
    Toast.makeText(this, "*****component_name : " + data.getStringExtra("component_name"), Toast.LENGTH_LONG).show(); 
    Toast.makeText(this, "*****report_id : " + report_id, Toast.LENGTH_LONG).show(); 
    Toast.makeText(this, "*****category_id : " + category_id, Toast.LENGTH_LONG).show(); 

    try { 

     if (componentsFragment == null) { 
      Toast.makeText(this, "*****componentsFragment IS NULL", Toast.LENGTH_LONG).show(); 
     } 

     //componentsFragment.AddComponentItem(data.getStringExtra("component_name"), report_id, category_id); 
     componentsFragment.AddComponentItem("Fenêtre", "1", "1"); 


     componentsFragment.RefreshList("1", "1"); 

    } 

    catch (Exception e) { 
     Toast.makeText(this, String.valueOf(e), Toast.LENGTH_LONG).show(); 
    } 

} 

Ein Beispiel Bestandteil von 'Kitchen', die tatsächliche Leistung ist:


***** Aktivität für Ergebnis

***** Komponente: Küche

***** auf Aktivitätsergebnis

***** component_name: Küchen

***** REPORT_ID: 1

***** category_id: 1

WIRFT AUSNAHME


So componentsFragment nicht null ist ...

Entschuldigung, ich habe ein Problem mit meinem Logcat, so dass ich tatsächlich mit Toast arbeite :(

Antwort

0

Es war ein Problem mit der Ersetzung Fragment Transaktion.

Ich habe nicht verwendet componentsFragment wie oben in dieser Transaktion beschrieben, sondern eine neu erstellte.

ComponentsFragment fragment = new CommponentsFragment(); 

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

    // Replace whatever is in the fragment_container view with this fragment, 
    // and add the transaction to the back stack so the user can navigate back 
    transaction.replace(R.id.fragment_container, fragment); 
    transaction.addToBackStack(null); // Commit the transaction 
    transaction.commit(); 

Diese Zeile:

transaction.replace(R.id.fragment_container, componentsFragment); 

Und dieser entfernt werden sollte:

ComponentsFragment fragment = new CommponentsFragment(); 

transaction.replace(R.id.fragment_container, fragment); 

Hat ersetzt werden