OnActivityResult中的启动活动给出了nullpointer

时间:2015-09-29 13:03:54

标签: java android

我有一个main活动和另外两个活动LoginActivity和ListTendersActivity。我希望在继续使用ListTendersActivity之前获得成功的登录状态。

这是清单

 <application
    android:name="com.example.secondprj.model.ApplicationData"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ListTendersActivity"
        android:label="@string/title_activity_listtenders" >

    </activity>
    <activity
        android:name=".LoginActivity"
        android:label="@string/title_activity_login"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>


</application>

因此我为LoginActivity调用了startActivityForResult()。在OnActivityResult中,我从LoginActivity获得了正确的结果。在此之后,我希望开始新的活动ListTendersActivity。

这是代码段

    @Override  
   protected void onActivityResult(int requestCode, int resultCode, Intent data)  
   {  
         super.onActivityResult(requestCode, resultCode, data);  
         if(requestCode == 1)//right activity
         {
             ResponseData response = (ResponseData) data.getSerializableExtra("Response");
             if(response.getStatus().equals("success"))//login successfull
             {
                 Intent listIntent = new Intent(super.getApplicationContext(), ListTendersActivity.class);
                 //listIntent.p
                 startActivity(new Intent(this.getApplicationContext(), ListTendersActivity.class));
             }
         }

   }

我正在获取startActivity的nullpointerexception

LogCat条目

 09-29 18:30:18.971: E/AndroidRuntime(5401):    at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)


I have added the super.oncreate(... in the ListTendersActivity. 

Any pointers in the right direction are welcome.
EDIT::

    09-29 18:55:14.051: D/Post(9953): {"Status":"success"}
09-29 18:55:14.061: I/System.out(9953): {"Status":"success"}
09-29 18:55:14.096: D/configure(9953): success
09-29 18:55:14.416: D/dalvikvm(9953): GC_FOR_ALLOC freed 295K, 12% free 11122K/12632K, paused 16ms, total 16ms
09-29 18:55:15.036: E/MoreInfoHPW_ViewGroup(9953): Parent view is not a TextView
09-29 18:55:54.986: D/AndroidRuntime(9953): Shutting down VM
09-29 18:55:54.986: W/dalvikvm(9953): threadid=1: thread exiting with uncaught exception (group=0x41db6700)
09-29 18:55:55.061: E/AndroidRuntime(9953): FATAL EXCEPTION: main
09-29 18:55:55.061: E/AndroidRuntime(9953): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.secondprj/com.example.secondprj.ListTendersActivity}: java.lang.NullPointerException
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2219)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.app.ActivityThread.access$700(ActivityThread.java:159)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.os.Looper.loop(Looper.java:176)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.app.ActivityThread.main(ActivityThread.java:5419)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at java.lang.reflect.Method.invokeNative(Native Method)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at java.lang.reflect.Method.invoke(Method.java:525)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at dalvik.system.NativeStart.main(Native Method)
09-29 18:55:55.061: E/AndroidRuntime(9953): Caused by: java.lang.NullPointerException
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at com.example.secondprj.ListTendersActivity.<init>(ListTendersActivity.java:32)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at java.lang.Class.newInstanceImpl(Native Method)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at java.lang.Class.newInstance(Class.java:1130)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
09-29 18:55:55.061: E/AndroidRuntime(9953):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
09-29 18:55:55.061: E/AndroidRuntime(9953):     ... 11 more

EDIT2 :::

    public class ListTendersActivity extends Activity implements OnClickListener
{
    private  DBManager mngr = new DBManager(getApplicationContext());
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listtenders);
        boolean success = false;
        int count = 0;


    ....

        @Override
     public void onStart()
     {
         super.onStart();
    ..

2 个答案:

答案 0 :(得分:3)

我不确定super.getApplicationContext()返回什么,如果有的话。但是你想在那里使用你的Activity Context。但是,由于您在下面调用了新的Intent,因此您可以删除该行,我建议您使用Activity Context而不是应用程序。

所以将其改为

ResponseData response = (ResponseData) data.getSerializableExtra("Response");
         if(response.getStatus().equals("success"))//login successfull
         {
             startActivity(new Intent(MainActivity.this, ListTendersActivity.class));
         }

潜在的问题是

private  DBManager mngr = new DBManager(getApplicationContext());

您尝试在不可用的方法之外访问Context。将其更改为

private  DBManager mngr;

然后在onCreate()

中实例化它
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listtenders);
    boolean success = false;
    int count = 0;

    // initialize it here
    DBManager mngr = new DBManager(getApplicationContext());
}

答案 1 :(得分:1)

请勿使用startActivity()致电getApplicationContext()。通过引用您当前的活动(例如startActivity(new Intent(MyActivity.this, ListTendersActivity.class));getActivity()

)来启动它