Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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_Android Activity - Fatal编程技术网

Java 有意图的活动变更不';不工作,不做事';我不知道为什么

Java 有意图的活动变更不';不工作,不做事';我不知道为什么,java,android,android-activity,Java,Android,Android Activity,我正在通过YouTube教程学习Android,我在不同的活动之间切换,一步一步地跟踪,结果就是不起作用 我尝试了我发现的唯一方法,有了意图,一些代码可能会有所不同,但最终使用了意图 这就是我所拥有的。activity_main.xml上的按钮: <Button android:id="@+id/btnNext" android:layout_width="match_parent"

我正在通过YouTube教程学习Android,我在不同的活动之间切换,一步一步地跟踪,结果就是不起作用

我尝试了我发现的唯一方法,有了意图,一些代码可能会有所不同,但最终使用了意图

这就是我所拥有的。activity_main.xml上的按钮:

<Button
                    android:id="@+id/btnNext"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_constraintTop_toBottomOf="@+id/lvFood"
                    android:text="@string/btnNext" />
按钮的侦听器:

btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent toSecond = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(toSecond);
            }
        });
我也试过这个,但结果是一样的

Intent toSecond = new Intent (v.getContext(), SecondActivity.class);
                startActivityForResult(toSecond, 0);
我的清单文件:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/hello"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".SecondActivity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
编辑 MainActivity上的代码:

package com.example.helloworld;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    Button btnSayHello, btnSayAnything, btnNext;
    TextView tvHelloWorld;
    EditText etSayAnything;
    Spinner spOptions;
    ListView lvFood;

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

        btnSayHello = findViewById(R.id.btnSayHello);
        tvHelloWorld = findViewById(R.id.tvHelloWorld);
        btnSayAnything = findViewById(R.id.btnSayAnything);
        etSayAnything = findViewById(R.id.etSayAnything);
        spOptions = findViewById(R.id.spOptions);
        lvFood = findViewById(R.id.lvFood);
        ArrayAdapter<CharSequence> spOptionsAdapter = ArrayAdapter.createFromResource(this, R.array.spOptions, android.R.layout.simple_spinner_item);
        spOptions.setAdapter(spOptionsAdapter);
        ArrayAdapter<CharSequence> lvFoodAdapter = ArrayAdapter.createFromResource(this, R.array.lvFood, android.R.layout.simple_list_item_1);
        lvFood.setAdapter(lvFoodAdapter);
        btnNext = findViewById(R.id.btnNext);

        btnSayHello.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(tvHelloWorld.getVisibility() == View.INVISIBLE)
                {
                    tvHelloWorld.setVisibility(View.VISIBLE);
                }else
                {
                    tvHelloWorld.setVisibility(View.INVISIBLE);
                }
            }
        });

        btnSayAnything.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tvHelloWorld.setText(etSayAnything.getText());
                etSayAnything.setText("");
            }
        });

        lvFood.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                tvHelloWorld.setText(lvFood.getItemAtPosition(position).toString());
            }
        });

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent toSecond = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(toSecond);
            }
        });
    }
}
下面是我观看的视频:

它应该带我去活动SecondActivity,它只有两个按钮,一个用于返回主活动,另一个用于关闭应用程序


但是,应用程序只是停止并关闭。

这可能是因为您试图在创建按钮布局之前找到按钮。您确定要在
onCreate
(或其中)之后使用
findViewbyId

请张贴您的全部主要活动代码(以及第二个)


编辑:我刚刚看到在您的第二个活动中引发了异常,因此可能不是我上面所说的

您尝试单击的按钮没有找到;确保在
第二个活动的
oncreate()
中执行此操作

setContentView(R.layout.your_second_activity_layout);
还要确保在第二个活动中像在第一个活动中一样实例化两个按钮:

btnNext = findViewById(R.id.btnNext);
编辑 在我看到您的
第二个活动后,您忘记了:

btnback = findViewById(R.id.btnBack);
btnExit = findViewById(R.id.btnExit);

创建Android活动时,还必须定义一个布局,该布局将成为该活动的用户界面。您可以通过
setContentView
方法将布局绑定到活动,该方法在活动的
onCreate
方法上尽快调用(您必须重写此方法)。只有将布局绑定到活动之后,才能开始将布局上的特定项(在本例中为按钮)绑定到代码中声明的相应对象。如果在将布局绑定到活动之前尝试绑定这些项,则会得到一个空指针,而不是实际的项。有关活动及其生命周期的更多信息,请阅读

编辑:

你没有初始化你的按钮。请确保在
第二个活动中有类似的内容:

public class SecondActivity extends Activity {  

  private Button btnBack;
  private Button btnExit;;

  @Override  
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_second);

    btnBack = findViewById(R.id.btnBack);  
    btnExit = findViewById(R.id.btnExit);  

    // set the button listeners
  }
}  

尽量在日志报告中查找诸如“错误”、“异常”、“原因”之类的词,因为在这一行中,您可以找到崩溃的主要原因

就像你在3号记录行写的那样

Unable to start activity ...com.example.helloworld.SecondActivity 
因为

Attempt to invoke method Button.setOnClickListener on a null object reference

这可能意味着您的
按钮btnNext
为空。为什么?我们无法看到整个代码,但我认为这是因为您没有在
onCreate()
方法中使用
setContentView()
设置布局视图。

我已经解决了它,我忘记了
findViewById
在我的
SecondActivity
中,您可能的副本从未包含
SecondActivity
的代码,所以我们无法回答您的问题;)您的
第二个活动中有错误。这就是它无法打开的原因。您必须添加主活动的完整代码,然后才能找到解决方案。我想你的btnNext是空的。所以需要完整的代码MainActivity。在膨胀视图之前,您可能试图通过按钮的id找到该按钮。你能告诉我们你调用findviewbyd来获取按钮的确切位置吗?问题表明有
btnNext=findviewbyd(R.id.btnNext)
MainActivity
中,我们可以从崩溃日志中看到,有一个按钮被按下以转到第二个活动,因此
setContentView()
必须也在那里,否则
MainActivity
中将不会有按钮按下。崩溃日志还指出崩溃发生在
SecondActivity
中。虽然人们的猜测可能是对的,但到目前为止,我们还不能真正说出哪里出了问题。但他们仍然只是猜测。啊,你是对的。问题在于第二个活动中的click listener设置。将相应地编辑我的答案。请检查我的答案,您在第二个活动中发现了frogot ViewById:
setContentView(R.layout.your_second_activity_layout);
Unable to start activity ...com.example.helloworld.SecondActivity 
Attempt to invoke method Button.setOnClickListener on a null object reference