我有一个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();
..
答案 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()