我一直在阅读有关此问题的不同问题和答案,但我仍然没有得到线索。我真的很抱歉,因为我知道这个问题会重复,但我真的需要帮助:(
每当我在操作栏中按下后面时,应用程序意外停止。
05-05 01:39:03.685: E/AndroidRuntime(10591): FATAL EXCEPTION: main
05-05 01:39:03.685: E/AndroidRuntime(10591): Process: com.FYP.undergraduate, PID: 10591
05-05 01:39:03.685: E/AndroidRuntime(10591): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.FYP.undergraduate/com.FYP.undergraduate.ChooseSubject}: java.lang.NullPointerException
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.ActivityThread.access$900(ActivityThread.java:161)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.os.Handler.dispatchMessage(Handler.java:102)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.os.Looper.loop(Looper.java:157)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.ActivityThread.main(ActivityThread.java:5356)
05-05 01:39:03.685: E/AndroidRuntime(10591): at java.lang.reflect.Method.invokeNative(Native Method)
05-05 01:39:03.685: E/AndroidRuntime(10591): at java.lang.reflect.Method.invoke(Method.java:515)
05-05 01:39:03.685: E/AndroidRuntime(10591): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
05-05 01:39:03.685: E/AndroidRuntime(10591): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
05-05 01:39:03.685: E/AndroidRuntime(10591): at dalvik.system.NativeStart.main(Native Method)
05-05 01:39:03.685: E/AndroidRuntime(10591): Caused by: java.lang.NullPointerException
05-05 01:39:03.685: E/AndroidRuntime(10591): at com.FYP.undergraduate.ChooseSubject.onCreate(ChooseSubject.java:35)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.Activity.performCreate(Activity.java:5426)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
05-05 01:39:03.685: E/AndroidRuntime(10591): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
05-05 01:39:03.685: E/AndroidRuntime(10591): ... 11 more
05-05 01:39:06.175: I/Process(10591): Sending signal. PID: 10591 SIG: 9
05-05 01:39:06.340: W/ApplicationPackageManager(11234): getCSCPackageItemText()
这是类ChooseSubject.java的部分编码。
package com.FYP.undergraduate;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.*;
import android.app.Activity;
import android.view.*;
import android.view.View.OnClickListener;
import android.widget.*;
import android.support.v4.app.NavUtils;
import android.annotation.TargetApi;
import android.content.Intent;
public class ChooseSubject extends Activity
{
String loginID;
ProgressBar spinner1;
int role;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_subject);
setupActionBar();
loginID = getIntent().getExtras().getString("LOGINID");
role = getIntent().getExtras().getInt("ROLE");
new MyGetSubjectClass().execute();
spinner1 = (ProgressBar)findViewById(R.id.progressBar1);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void setupActionBar()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.choose_subject, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:1)
重要的是,我建议您不要在Android中使用navigateUpFromSameTask
,因为有a known bug on 4.1 and higher。对于“向上”活动,您只需调用finish()
方法即可销毁当前活动并自动返回到父活动:
case android.R.id.home:
this.finish(); // the "up" activity will be destroyed
return true;
我怀疑你在“up”活动时再做Intent
以返回ChooseSubject
然后活动没有来自这个新Intent的数据,因为通常你这样做是为了调用{{ 1}}活动:
ChooseSubject
如果您再次调用Intent i = new Intent(PreviousActivity.this, ChooseSubject.class);
// pass the datas
i.putString("LOGINID", loginIdStringValue);
// then, call startActivity method
startActivity(i);
来重新启动startActivity
课程,则表示您尚未传递任何数据。第一次显示活动时会调用ChooseSubject
和onCreate
。当您启动了另一个活动时,您只需使用getIntent
再次调用这些方法即可返回上一个活动。
也许您应该存储发送的值以避免出现空异常。当您查看有关Activity Lifecycle的文档时,您会发现仅当活动不再可见且另一个应用需要内存时才会调用finish()
。但是,根据Documentation:
系统使用Bundle实例状态来保存活动布局中每个View对象的信息(例如输入EditText对象的文本值)。因此,如果您的活动实例被销毁并重新创建,则布局的状态将恢复到之前的状态,而您无需代码。
然后,您可以按如下方式存储值:
onCreate
在将活动置于此背景状态之前调用 This method。您可以在@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the datas
savedInstanceState.putString("SAVED_LOGINID", getIntent().getExtras().getString("LOGINID"));
savedInstanceState.putInt("SAVED_ROLE", getIntent().getExtras().getInt("ROLE"));
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
中检索这些值,这些值使用onCreate
作为参数,如:
Bundle
如果您需要其他活动中的值,则解决方案可能会使用SharedPreference将其存储在设备上,另请参阅Saving Persistent State部分。但是,您可以在Storage Options上看到其他一些功能。
它可能会解决您的问题,我希望这会有所帮助 如果您需要更多相关信息,请与我们联系。