2017-03-19 3 views
0

Ich muss startActivityForResult aus der Klasse anrufen, aber ich bekomme keine java.lang.NullPointerException.Anruf starten startActivityForResult innerhalb der Klasse

Datei: SignUpFragment.java

public class SignUpFragment extends Fragment { 

    ImageView imageView; 


    private OnFragmentInteractionListener mListener; 

    public SignUpFragment() { 
     // Required empty public constructor 

     Test test = new Test(); 
     test.getImageData(); 

    } 
} 

PS: Test.java ist keine Activity, seine Klasse und ich Activity Zugang zu startActivityForResult

Datei Test.java

public class Test extends Activity { 

    public void getImageData() { 
     Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     pickIntent.setType("image/*"); 

     startActivityForResult(pickIntent, 1); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     Log.d(“Reps”, ”Called”); 
    } 

} 

zu bekommen erstreckt Update: Hier ist das Fehlerprotokoll:

mozeh E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.moaaznash.userregistrationmozeh, PID: 28091 
    java.lang.NullPointerException 
     at android.app.Activity.startActivityForResult(Activity.java:3424) 
     at android.app.Activity.startActivityForResult(Activity.java:3385) 
     at com.example.moaaznash.mozehlibraryandroid.TestMozeh1.startPhotoLibs(TestMozeh1.java:52) 
     at com.example.moaaznash.userregistrationmozeh.SignUpFragment$1.onClick(SignUpFragment.java:101) 
     at android.view.View.performClick(View.java:4438) 
     at android.view.View$PerformClick.run(View.java:18422) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 

    [ 03-19 10:08:41.231 1615: 1809 D/   ] 
    HostConnection::get() New Host Connection established 0xb990e140, tid 1809 
+0

Können Sie Ihr Protokoll hinzufügen? oder was hat diese Null? \ – Sattar

+0

nmozeh E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.beispiel.moaaznash.userregistrationmozeh, PID: 22753 java.lang.NullPointerException –

+2

Warum erweitern Sie es auf Aktivität. Aktivität ist ein Baustein der Benutzeroberfläche. Du scheinst keine UI in dieser Aktivität zu haben und poste bitte den kompletten Login-Code-Bereich und nicht den Kommentar-Bereich. –

Antwort

0
public class Test extends Activity { 

    public void getImageData() { 
     Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     pickIntent.setType("image/*"); 
     if (pickIntent == 1) { 
      startActivity(pickIntent); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Log.d(“Reps”,”Called”); 
    } 
} 
+0

es hat nicht funktioniert für mich –

+0

@MOAAZNAHSAWI in welchem ​​Wert ist Ihr Ergebnis und welchen Wert erwarten Sie im Ergebnis Aktivität zu laufen? –

+0

nicht wichtig der Wert ich muss nur aufgerufen werden –

0

ich würde dazu tendieren, die getImageData() und die onActivityResult auf die Aktivitätsklasse zu setzen das Fragment (und die Kommunikation zwischen der Aktivität und Fragmente durch Zuhörer zum Beispiel) enthält.

Aber unten ist eine Alternative

public class SignUpFragment extends Fragment { 
    private final int PICK_ID = 1; 

    public SignUpFragment() { 
     // Required empty public constructor 
    } 

    public static SignUpFragment newInstance() { 
     SignUpFragment fragment = new SignUpFragment(); 
     Bundle args = new Bundle(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     getImageData(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == PICK_ID && resultCode == Activity.RESULT_OK) { 
      Log.d("TAG", "onActivityResult"); 

      if (data != null) { 
       try { 
        InputStream inputStream = getActivity().getContentResolver().openInputStream(data.getData()); 
        //... 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

    public void getImageData(){ 
     Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     pickIntent.setType("image/*"); 

     startActivityForResult(pickIntent, PICK_ID); 
    } 
} 

Und einfach in Ihrer Tätigkeit so etwas wie dieses

public class MainActivity extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      getSupportFragmentManager() 
        .beginTransaction() 
        .add(android.R.id.content, SignUpFragment.newInstance()) 
        .commit(); 
     } 

    } 
0

Sie behandeln Aktivität wie eine gewöhnliche Java-Klasse setzen, und nicht eine andere Aktivität mögen. Wenn Sie startActivityForResult() aufrufen, erhalten Sie daher eine Null-Null-Erkennung, da die onCreate() -Aktivität der Aktivität nicht aufgerufen wurde, was bedeutet, dass die aktuelle Instanz für den Aufruf von startActivityForResult() nicht gültig ist.

Verwandte Themen