Java Can';t实例化类-android编程
我在这里观看了教程视频:在观看教程时遇到了一些错误。在我开始学习教程:onCheckedChanged方法之前,一切都很好。有人能解释一下我做错了什么吗?非常感谢 LogCat代码Java Can';t实例化类-android编程,java,android,xml,Java,Android,Xml,我在这里观看了教程视频:在观看教程时遇到了一些错误。在我开始学习教程:onCheckedChanged方法之前,一切都很好。有人能解释一下我做错了什么吗?非常感谢 LogCat代码 09-15 18:38:22.444: E/MediaPlayer(1764): Should have subtitle controller already set 09-15 18:38:27.984: E/MediaPlayer(1764): Should have subtitle controller a
09-15 18:38:22.444: E/MediaPlayer(1764): Should have subtitle controller already set
09-15 18:38:27.984: E/MediaPlayer(1764): Should have subtitle controller already set
09-15 18:38:31.374: E/AndroidRuntime(1764): FATAL EXCEPTION: main
09-15 18:38:31.374: E/AndroidRuntime(1764): Process: com.example.myfirstapp, PID: 1764
09-15 18:38:31.374: E/AndroidRuntime(1764): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.TutorialOne}: java.lang.InstantiationException: can't instantiate class com.example.myfirstapp.TutorialOne
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.app.ActivityThread.access$800(ActivityThread.java:135)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.os.Handler.dispatchMessage(Handler.java:102)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.os.Looper.loop(Looper.java:136)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.app.ActivityThread.main(ActivityThread.java:5017)
09-15 18:38:31.374: E/AndroidRuntime(1764): at java.lang.reflect.Method.invokeNative(Native Method)
09-15 18:38:31.374: E/AndroidRuntime(1764): at java.lang.reflect.Method.invoke(Method.java:515)
09-15 18:38:31.374: E/AndroidRuntime(1764): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
09-15 18:38:31.374: E/AndroidRuntime(1764): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
09-15 18:38:31.374: E/AndroidRuntime(1764): at dalvik.system.NativeStart.main(Native Method)
09-15 18:38:31.374: E/AndroidRuntime(1764): Caused by: java.lang.InstantiationException: can't instantiate class com.example.myfirstapp.TutorialOne
09-15 18:38:31.374: E/AndroidRuntime(1764): at java.lang.Class.newInstanceImpl(Native Method)
09-15 18:38:31.374: E/AndroidRuntime(1764): at java.lang.Class.newInstance(Class.java:1208)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
09-15 18:38:31.374: E/AndroidRuntime(1764): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
09-15 18:38:31.374: E/AndroidRuntime(1764): ... 11 more
主Java代码
package com.example.myfirstapp;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
public class Main extends Activity {
// declare variables for the who class
MediaPlayer logoMusic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
// start music command
logoMusic=MediaPlayer.create(Main.this, R.raw.melody);
logoMusic.start();
// start thread
Thread logoTimer=new Thread(){
public void run(){
try {
sleep(5000); // 1k is 1sec
Intent menuIntent=new Intent("com.example.myfirstapp.MENU");// address in manifest
startActivity(menuIntent);
} catch (InterruptedException e) {
e.printStackTrace();
}
finally
{
finish();
}
}
};
logoTimer.start();
}
@Override
protected void onPause() {
super.onPause();
logoMusic.release();
}
}
菜单Java代码
package com.example.myfirstapp;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Menu extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MediaPlayer buttonSound=MediaPlayer.create(Menu.this, R.raw.button);// make sure it is a final variable bc u are using it in sub
// set up buttons reference
Button tut1=(Button) findViewById(R.id.tutorial1);
Button tut2=(Button) findViewById(R.id.tutorial2);
// setting up the button functions
tut1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
buttonSound.start();
startActivity(new Intent("com.example.myfirstapp.TutorialOne"));// short cut in creating the intent
}
});
tut2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
buttonSound.start();
startActivity(new Intent("com.example.myfirstapp.TutorialOne"));
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
}
java代码教程
package com.example.myfirstapp;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
@SuppressLint("RtlHardcoded")
public abstract class TutorialOne extends Activity implements OnCheckedChangeListener{
// set up variables
TextView textOut;
EditText textIn;
RadioGroup gravityG,styleG;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tutorial1);
//similar to how you set the button to reference to xml
textOut=(TextView)findViewById(R.id.tvChange);
textIn=(EditText)findViewById(R.id.editText1);
gravityG=(RadioGroup)findViewById(R.id.rgGravity);
styleG=(RadioGroup)findViewById(R.id.rgStyle);
Button gen=(Button)findViewById(R.id.generate);
gen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// when you click generate, it will text out
textOut.setText(textIn.getText());// get user input and output
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
public void onCheckedChanged(CompoundButton buttonView, int isChecked) {
// TODO Auto-generated method stub
switch(isChecked){
case R.id.rbLeft:
textOut.setGravity(Gravity.LEFT);// set gravity to left
break;
case R.id.rbCenter:
textOut.setGravity(Gravity.CENTER);
break;
case R.id.rbRight:
textOut.setGravity(Gravity.RIGHT);
break;
}
}}
main.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.example.myfirstapp.Main" >
<Button
android:id="@+id/tutorial1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button1" />
<Button
android:id="@+id/tutorial2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="31dp"
android:text="@string/button2" />
</RelativeLayout>
splash.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/flash">
</LinearLayout>
tutorial1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:text=""
android:textStyle="bold" >
<requestFocus />
</EditText>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2" >
<TextView
android:id="@+id/tvStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/style"
android:gravity="center" />
<TextView
android:id="@+id/tvGravity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="@string/gravity" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2" >
<RadioGroup
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:id="@+id/rgStyle" >
<RadioButton
android:id="@+id/rbNormal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/normal" />
<RadioButton
android:id="@+id/rbItalic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/italic" />
<RadioButton
android:id="@+id/rbBold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bold" />
</RadioGroup>
<RadioGroup
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:id="@+id/rgGravity" >
<RadioButton
android:id="@+id/rbLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left" />
<RadioButton
android:id="@+id/rbCenter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/center" />
<RadioButton
android:id="@+id/rbRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/right" />
</RadioGroup>
</LinearLayout>
<TextView
android:id="@+id/tvChange"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text_view_change"
android:textStyle="bold" />
<Button
android:id="@+id/generate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/generate"
android:textSize="25sp" />
</LinearLayout>
AndroidManifest代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myfirstapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Menu"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.myfirstapp.MENU" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".TutorialOne"
android:label="@string/app_name" >
<intent-filter>
<action android:name= "com.example.myfirstapp.TutorialOne" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
你的
教程本身
活动
是抽象的。不能实例化抽象类。顺便说一句,无论如何,您不应该硬编码类名。如果这就是你的教程所建议的,那么我建议你跑得很远很远
Intent menuIntent = new Intent(Main.this, Menu.class);
startActivity(menuIntent);
编辑:对于onCheckedChanged()
,您需要实现RadioGroup.OnCheckedChangeListener
,而不是CompoundButton.OnCheckedChangeListener
。CompoundButton
one使用布尔值,而RadioGroup
one提供整数
import android.widget.CompoundButton.OnCheckedChangeListener;
应该是
import android.widget.RadioGroup.OnCheckedChangeListener;
为了使用onCheckedChanged()方法,需要一个侦听器来获取该方法。使用由方法定义的匿名类侦听器执行此操作,或在onCreate()方法中执行以下操作:
button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
/*Do things here*/
}
});
多亏了大家的帮助,我能够单独为教程生成一个新代码,但我不知道为什么我无法使用这些选项:左、右、正常、斜体、粗体。这是教程一的新代码,我还根据KCopock的建议更改了主java中的意图 这是我的新代码:
package com.example.myfirstapp;
import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
public class TutorialOne extends Activity implements OnCheckedChangeListener
{
// set up variables
TextView textOut;
EditText textIn;
RadioGroup gravityG, styleG;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tutorial1);
// similar to how you set the button to reference to xml
textOut = (TextView) findViewById(R.id.tvChange);
textIn = (EditText) findViewById(R.id.editText1);
gravityG = (RadioGroup) findViewById(R.id.rgGravity);
styleG = (RadioGroup) findViewById(R.id.rgStyle);
Button gen = (Button) findViewById(R.id.generate);
gen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// when you click generate, it will text out
textOut.setText(textIn.getText());// get user input and output
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.rbLeft:
textOut.setGravity(Gravity.LEFT);// set gravity to left
break;
case R.id.rbCenter:
textOut.setGravity(Gravity.CENTER);
break;
case R.id.rbRight:
textOut.setGravity(Gravity.RIGHT);
break;
case R.id.rbNormal:
textOut.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL),Typeface.NORMAL);
break;
case R.id.rbItalic:
textOut.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC),Typeface.ITALIC);
break;
case R.id.rbBold:
textOut.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD),Typeface.BOLD);
break;
}
}
}
它在
manifest.xml
中声明正确吗?嗨,出于某种原因,它不允许我添加以下方法:public void onCheckedChanged(RadioGroup,int checkedd){}当它是一个常规类时,所以我需要将它作为一个抽象来工作。有没有一种方法可以让我把教程单独作为一个摘要来添加?比如,我想使用与教程视频相同的方法,因为它返回int。所以我可以使用switch case。eclipse让我使用的方法是:@Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){//TODO Auto-generated method stub}将其抽象化只是隐藏您没有正确重写oncheckedchangelister
接口方法。使其非抽象,然后修复覆盖,以便签名是boolean isChecked
,而不是int isChecked
。非常感谢。让我试试。嗨,我按照你告诉我的做了更改,遇到了一些错误/建议,所以我只是按照编译器告诉我的做了。我遇到了这样一个问题:我必须为OncheckedChangedListner创建一个接口,我做到了,但它仍然给我errorNvm。我明白了:)我完全按照你说的做了,现在成功了。我避免了他们一直叫我做的硬编码。无论如何谢谢。