我有一个非常基本的应用程序运行,它告诉定义是否正确。主活动只有一个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
答案 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给出的代码,它应该可以正常工作:)