Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用操作栏返回时,应用意外停止_Java_Android - Fatal编程技术网

Java 使用操作栏返回时,应用意外停止

Java 使用操作栏返回时,应用意外停止,java,android,Java,Android,我一直在阅读不同的问题和答案,但我仍然没有得到一个线索。我真的很抱歉,因为我知道这个问题重复了,但我真的需要帮助:( 每当我在操作栏中按back时,应用程序都会意外停止 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:3

我一直在阅读不同的问题和答案,但我仍然没有得到一个线索。我真的很抱歉,因为我知道这个问题重复了,但我真的需要帮助:(

每当我在操作栏中按back时,应用程序都会意外停止

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);
    }

重要的是,我建议您不要在Android中使用
navigateUpFromSameTask
,因为有。在“启动”活动的情况下,您只需调用
finish()
方法即可销毁当前活动
并自动返回父活动:

case android.R.id.home:
    this.finish(); // the "up" activity will be destroyed
    return true;  
我怀疑您在“向上”活动中执行另一个
Intent
,返回到
ChooseSubject
时,该活动没有来自此新Intent的数据,因为通常您这样做是为了调用
ChooseSubject
活动:

Intent i = new Intent(PreviousActivity.this, ChooseSubject.class);
// pass the datas
i.putString("LOGINID", loginIdStringValue);
// then, call startActivity method
startActivity(i);
如果您再次调用
startActivity
(re)启动
选择Subject
类,您尚未传递任何数据。当第一次显示活动时,将调用
onCreate
getIntent
。当启动另一个活动时,您可以使用
finish()
返回到上一个活动,而无需再次调用这些方法

也许您应该存储发送的值以避免出现空异常。当您查看有关的文档时,您可以看到只有当活动不再可见且另一个应用程序需要内存时才会调用
onCreate
。但是,根据:

系统使用捆绑实例状态保存有关活动布局中每个视图对象的信息(例如输入到EditText对象中的文本值)。因此,如果您的活动实例被销毁并重新创建,则布局的状态将恢复到其以前的状态,而您不需要任何代码

然后,可以按如下方式存储值:

@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
中检索这些值,它使用
捆绑包作为参数,如:

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

    // Check the state of the activity bundle
    if(savedInstanceState != null) { // the activity has already be created
         loginID = savedInstanceState.getString("SAVED_LOGINID");
         role = savedInstanceState.getInt("SAVED_ROLE");
    } else { // the activity is displayed for the 1st time
         loginID = getIntent().getExtras().getString("LOGINID");
         role = getIntent().getExtras().getInt("ROLE");
    }
    //...
}  
如果您需要其他活动中的值,则可能会使用解决方案将其存储在设备上,另请参见第节。但是,您可以在上看到一些其他功能

这可能会解决您的问题,我希望这会有所帮助。

如果您需要更多信息,请告诉我。

本课程的第35行是什么?(请参阅错误:com.FYP.industrial.ChooseSubject.onCreate(ChooseSubject.java:35))第35行是“loginID=getIntent().getExtras().getString(“loginID”);”,就是这样。getIntent()为null或getExtras()关于意图是空的。现在你知道其余的了。好的..谢谢,我将尝试搜索更多关于这些的信息。据我所知,使用“后退”按钮返回到某个活动将意味着意图不再存在(除非你特别以这种方式编码)-如果这是正确的,那么在这种情况下,将字符串存储在共享首选项中将更有意义非常感谢!这解决了我的问题!!谢谢~