我希望你能帮助我,我试图调查其他问题,但我没有找到我想要做的或没有得到它。 这是我正在尝试做的一个非常简单的例子。我有这个主要活动:
public class MainActivity extends Activity {
static EditText num1, num2; //Change EditText from TextView
static TextView num3; //Textview variable
int x, y, r;
Addition addition=new Addition();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1=(EditText)findViewById(R.id.editText);
num2=(EditText)findViewById(R.id.editText2);
num3=(TextView)findViewById(R.id.textView);
x = 0;
y = 0;
}
public void add (View view){
setXY();
r=addition.addResult(x,y);
num3.setText(String.valueOf(r));
}
public void setXY(){
x=Integer.parseInt(num1.getText().toString());
y=Integer.parseInt(num2.getText().toString());
}
}
我试图从这个类中调用该方法
public class Addition {
public int addResult(int x, int y){
return x+y;
}
}
所以在开始时应用程序崩溃是因为从布局中接收到的空值,但在设置了try catch后,应用程序正在运行。当我再次点击“添加”按钮时,问题就出现了。你们能告诉我为什么吗?我究竟做错了什么?我该怎么办?如果我有一个具有更多“操作”方法的应用程序,是否值得创建一个包含所有这些操作的类并从主要操作中调用它们?或者我不应该尝试这样做?
问候!!!
Chiok
logcat的
07-14 14:35:24.625 5407-5407/com.chiok.x2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.chiok.x2, PID: 5407
java.lang.IllegalStateException: Could not find method addition(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.widget.Button with id 'button'
at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4479)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4443)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
07-14 14:35:25.893 5407-5407/com.chiok.x2 I/Process: Sending signal. PID: 5407 SIG: 9
这是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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.chiok.x2.MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editText"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="48dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editText2"
android:layout_below="@+id/editText"
android:layout_centerHorizontal="true"
android:layout_marginTop="52dp"
android:onClick="add" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="71dp"
android:onClick="addition" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="56dp" />
我想它与可编辑的objets有关,但是我没有尝试过。
答案 0 :(得分:1)
更改这些代码
num1=(TextView)findViewById(R.id.editText);
num2=(TextView)findViewById(R.id.editText2);
num3=(TextView)findViewById(R.id.editText3);
到
import { Injectable } from 'angular2/core';
import { Http, Response } from 'angular2/http';
const myFirebase = 'https://*****.firebaseio.com';
@Injectable()
export class FirebaseService {
constructor(private _http: Http) {}
getPages() {
return this._http.get(myFirebase + '/pages_name.json')
.map((res:Response) => res.json());
}
}
并记得在项目中导入R.java。
答案 1 :(得分:1)
onClick命令需要参数View v in receiver方法,所以将addResult()更改为addResult(View v)
答案 2 :(得分:0)
使用以下代码。
public class MainActivity extends Activity {
EditText num1, num2; //Change EditText from TextView
TextView num3; //Textview variable
Button add; //Button variable
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //Add R.layout.activity_main
num1=(EditText)findViewById(R.id.editText); //R.id.editText
num2=(EditText)findViewById(R.id.editText2); //R.id.editText2
num3=(TextView)findViewById(R.id.textview); // initialize textview
add=(Button) findViewById(R.id.add); //initialize add button
final Addition x = new Addition();
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
x.addResult();
}
});
}
}
public class Addition {
public void addResult(){
try {
num3.setText(String.valueOf((Integer.parseInt(num1.getText().toString())+(Integer.parseInt(num2.getText().toString())))));
}
catch (Exception e) {}
}
}
}
答案 3 :(得分:0)
使Textview保持静态。尝试
static TextView num1, num2,num3;
<强>原因强>
Addition x = new Addition();
在上面的代码中,它正在创建 Addition 类的新实例,它扩展了 MainActivity ,因此TextView将 NULL 对于新实例。为了使TextView初始化可用于所有实例,请使TextView 静态。
答案 4 :(得分:0)
如果我的应用程序包含更多&#34;操作&#34; ,方法,值得创造 一个包含所有这些操作的类,并从主要操作中调用它们?
是的,值得的是,它会使您的代码更加面向对象。在这种情况下,如果将类的名称从“添加”更改为“操作”,则更有意义。此外,Addition类不需要是一个活动。所以不要将其从MainActivity扩展。
只需向该方法发送两个参数,并使addResult 返回一个int 结果,这是添加这两个参数。
在MainActivity中获取addResult方法和setText的返回值edittext3。
class ChangeColumnTypeClientStatus < ActiveRecord::Migration
def change
change_column :clients, :status, :integer, default: 0
end
end
你的加法课可以是这样的;
public class MainActivity extends Activity {
TextView num1, num2,num3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1=(TextView)findViewById(R.id.editText);
num2=(TextView)findViewById(R.id.editText2);
num3=(TextView)findViewById(R.id.editText3);
// here I am trying to call the method
Addition x = new Addition();
int param1 = Integer.parseInt(num1.getText().toString());
int param2 = Integer.parseInt(num2.getText().toString());
int result = x.addResult(param1, param2);
num3.setText(String.valueOf(result));
}
}
摘要我更改了public class Addition {
public int addResult(int param1, int param2){
return param1 + param2;
}
}
在Addition课程中删除setContentView(R.layout.activity_main);
。
此外,如果错误仍然存在,我需要查看 xml layout ,您可以在其中定义文本视图和按钮。