Java 在类内调用start startActivityForResult
我需要从类内部调用Java 在类内调用start startActivityForResult,java,android,Java,Android,我需要从类内部调用startActivityForResult,但我没有得到java.lang.NullPointerException 文件:SignUpFragment.java public class SignUpFragment extends Fragment { ImageView imageView; private OnFragmentInteractionListener mListener; public SignUpFragment() {
startActivityForResult
,但我没有得到java.lang.NullPointerException
文件:SignUpFragment.java
public class SignUpFragment extends Fragment {
ImageView imageView;
private OnFragmentInteractionListener mListener;
public SignUpFragment() {
// Required empty public constructor
Test test = new Test();
test.getImageData();
}
}
另外:Test.java
不是一个活动
,它的类和我扩展了活动
,以访问startActivityForResult
文件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”);
}
}
更新:以下是错误日志:
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
我倾向于将getImageData()和onActivityResult放在包含片段的Activity类中(例如,通过侦听器在Activity和片段之间进行通信) 但下面是另一种选择
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);
}
}
在你的活动中,简单地说
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();
}
}
您将活动视为普通Java类,而不是另一个活动。因此,当您调用startActivityForResult()时,会得到一个nullpointerexception,因为尚未调用该活动的onCreate(),这意味着其当前实例对于调用startActivityForResult()无效。您能添加日志吗?或者是什么原因导致此空值?\n Zeh E/AndroidRuntime:致命异常:主进程:com.example.moaaznash.userregistrationmozeh,PID:22753 java.lang.NullPointerException为什么要将其扩展到活动。活动是用户界面的构建块。您在该活动中似乎没有UI,请在“代码”部分而不是“注释”部分发布完整的日志。我进行了扩展,因为我需要从同一个类中访问startActivityForResult,我不想将该活动传递给该方法,如果我将活动传递给该方法,那么我必须在不在类内部的片段中定义onActivityResult通常不允许您显式创建活动实例。@MOAAZNAHSAWI您的结果驻留在哪个值中,以及您希望在结果中运行活动的值是什么?不管值是什么,我只需要在此处调用没有条件满足吗?
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();
}
}