Android Studio:不使用编辑文本启动活动

时间:2016-08-30 20:02:07

标签: java android emulation

我有一个非常基本的应用程序运行,它告诉定义是否正确。主活动只有一个textView和一个editText。当我尝试运行模拟器时,它表示应用程序已停止。关于什么是错的任何想法?提前致谢

主要活动

package com.example.owner.epsilon;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

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

    LinearLayout layout = new LinearLayout(this);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_physics);

    final EditText answer =  (EditText)layout.findViewById(R.id.answer);
    String userAnswer = answer.getText().toString();

    if(userAnswer.contains("remain"+"force"+"constant"+"velocity")){
        System.out.print("Correct");
    }
    else{
        System.out.print("Incorrect");
    }


}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

XML文件

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Newton's First Law"
        android:id="@+id/definitionTextView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="52dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/answer"
        android:layout_below="@+id/definitionTextView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="114dp" />
</RelativeLayout>

堆栈追踪:

Waiting for device.
Device connected: emulator-5554
Device emulator-5554 is online, waiting for processes to start up..
Device emulator-5554 is online, waiting for processes to start up..
Device is ready: emulator-5554
Target device: emulator-5554
Uploading file
    local path:        C:\Users\Owner\AndroidStudioProjects\Epsilon\app\build\outputs\apk\app-debug.apk
remote path: /data/local/tmp/com.example.owner.epsilon
Installing com.example.owner.epsilon
DEVICE SHELL COMMAND: pm install -r    "/data/local/tmp/com.example.owner.epsilon"

pkg:/data/local/tmp/com.example.owner.epsilon

Device disconnected: emulator-5554
Launching application:    com.example.owner.epsilon/com.example.owner.epsilon.MainActivity.
DEVICE SHELL COMMAND: am start -D -n "com.example.owner.epsilon/com.example.owner.epsilon.MainActivity" -a  android.intent.action.MAIN -c android.intent.category.LAUNCHER
Error: Adb refused a command

3 个答案:

答案 0 :(得分:0)

首先,您要拨打onSaveInstanceState()两次。没有bueno。您还要拨打setContentView()两次。也没有bueno。

其次,为什么要在onCreate()中声明LinearLayout?这是不必要的。当您致电setContentView(R.layout.activity_physics)时,您现在可以永久引用该布局。

第三,您正在抓取对EditText的引用,然后立即尝试在onCreate()中获取用户的答案,这将无效,因为此时用户还没有看到屏幕。您需要在应用中使用某种“提交”按钮,用户可以在他们想要检查答案时点击这些按钮。

尝试将代码更改为:

private EditText answer;
private Button submit;

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

    answer = (EditText)findViewById(R.id.answer);
    submit = (Button)findViewById(R.id.submit);
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String userAnswer = answer.getText().toString();
            if(userAnswer.contains("remain"+"force"+"constant"+"velocity")){
                Toast.makeText(this, "Correct", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "Incorrect", Toast.LENGTH_LONG).show();                }
        }
    });
}

确保在xml文件中添加一个按钮,并为其提供“提交”ID。

祝你好运。

答案 1 :(得分:0)

您没有找到正确布局的视图。

更改

final EditText answer =  (EditText)layout.findViewById(R.id.answer);

final EditText answer =  (EditText)findViewById(R.id.answer);

答案 2 :(得分:0)

这一行只是LinearLayout类的实例化:

 LinearLayout layout = new LinearLayout(this);

所以,如果你像在这一行中那样请求子视图:

final EditText answer =  (EditText)layout.findViewById(R.id.answer);

应用程序会崩溃,因为您的“布局”为空,并且不包含您请求的EditText!

除此之外,如果“MainActivity”的主要布局是“activity_main.xml”,则只能使用:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

现在,对于EditText,当创建“MainActivity”时,您正在请求EditText的内容,这将始终返回一个空字符串(如果您没有为EditText设置默认值)。您应该给予用户在EditText框中键入内容的时间,然后,您可以检索EditText的内容。

只是想给你一些可能对你未来的应用有所帮助的提示。 使用@privatestaticint给出的代码,它应该可以正常工作:)