Java 用于打印文本的简单android应用程序

Java 用于打印文本的简单android应用程序,java,android,Java,Android,我最近开始看关于android开发的youtube视频。我看了一些,并试图写我自己的应用程序。基本上,它所做的是,用户在文本字段中输入文本,当用户按下单击按钮时,输入的值将显示在文本视图中 我很困惑应该在哪里定义变量,如何检索值以及如何显示特定项上的值。我想知道这些东西,这样我就可以正确地开始开发android应用程序了。这是我目前拥有的代码: package com.abihnav.numdisplayer; import android.os.Bundle; import android.

我最近开始看关于android开发的youtube视频。我看了一些,并试图写我自己的应用程序。基本上,它所做的是,用户在文本字段中输入文本,当用户按下单击按钮时,输入的值将显示在文本视图中

我很困惑应该在哪里定义变量,如何检索值以及如何显示特定项上的值。我想知道这些东西,这样我就可以正确地开始开发android应用程序了。这是我目前拥有的代码:

package com.abihnav.numdisplayer;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

public String YOUR_NUM = "YOUR_NUM";

EditText numEditText;
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditText numEditText = (EditText) findViewById(R.id.numEditText);
    TextView textView = (TextView) findViewById(R.id.textView1);
}

public void printNum(){
    YOUR_NUM = numEditText.getText().toString();
    textView.setText(YOUR_NUM);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

每当我输入文本或数字时,应用程序强制关闭。救命啊

通过执行以下操作:

EditText numEditText;
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditText numEditText = (EditText) findViewById(R.id.numEditText);
    TextView textView = (TextView) findViewById(R.id.textView1);
}
您正在创建同一变量的两个实例。糟糕!为了在其他方法中使用这些值,您应该从
onCreate
中删除
EditText
TextView
,如下所示:

EditText numEditText;
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   numEditText = (EditText) findViewById(R.id.numEditText);
   textView = (TextView) findViewById(R.id.textView1);
}
现在您仍然需要定义按钮及其
onClick
方法来完成此操作。像这样:

EditText numEditText;
TextView textView;
Button myButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   numEditText = (EditText) findViewById(R.id.numEditText);
   textView = (TextView) findViewById(R.id.textView1);
   myButton = (Button) findViewById(R.id.button_id);
   myButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            printNum();
        }
   });

}

另外,确保XML文件中有一个id属性为
@+id/button\u id
,代码才能正常工作。(感谢邹祖)

像@TronicZomB一样,你也可以这样尝试

EditText numEditText;
TextView textView;
Button myButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   numEditText = (EditText) findViewById(R.id.numEditText);
   textView = (TextView) findViewById(R.id.textView1);
   myButton = (Button) findViewById(R.id.button_id);

}
public void printNum(View v)  {
YOUR_NUM = numEditText.getText().toString();
textView.setText(YOUR_NUM);
}

在XML部分

<Button
android:id=@id/button_id
android:text="ok"

android:onClick="printNum"

android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>


因此,通过将其直接放在XML中,它将调用名为printNum的方法并执行它。

我没有看到按钮吗?试试这个textView.setText(String.valueOf(YOUR_NUM));按钮在哪里@Raghundan
您的_NUM
已经是一个字符串变量了,为什么要在它上面调用
String.valueOf()
。您有两个重复的变量
numEditText
textView
(一个是本地到
onCreate()
,另一个是全局到
MainActivity
(从未设置))。你会遇到麻烦的@ZouZou我没有发现您的_NUM是string,您应该在XML文件中添加
按钮
,非常感谢!我完全忘了实例化一个按钮。我没有添加onClick函数真是太愚蠢了。非常感谢你!另外,在哪里声明变量更好?在onCreate函数之外还是在它里面?我知道我声明了两次,但是哪里是声明变量的最佳位置呢?@AbhinavBhatta我想说的是,所有变量都是在创建时外部的
onCreate
,如我所示,这允许您从其他方法访问它们(例如,
getText()
),就像您使用printNum()所做的那样方法。如果这是您正在寻找的答案,那么您可以单击左侧的勾号接受它:),但是没有义务这样做。