【问题标题】:Can't instantiate class -android programming无法实例化类-android编程
【发布时间】:2014-09-15 22:52:07
【问题描述】:

我在此处关注教程视频:http://www.youtube.com/watch?v=pZaRNVwKAy4&list=PLB03EA9545DD188C3&index=7,并在关注教程时遇到了一些错误。一切正常,直到我开始使用教程: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 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();
}

}

TutorialOne 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;
}
}}

主要的.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>

【问题讨论】:

  • 在您的manifest.xml 中声明是否正确?

标签: java android xml


【解决方案1】:

您的 TutorialOne Activity 是抽象的。您不能实例化抽象类。顺便说一句,无论如何您都不应该对类名进行硬编码。如果这就是您的教程所建议的,那么我建议您跑得远远的。

Intent menuIntent = new Intent(Main.this, Menu.class);
startActivity(menuIntent);

编辑:至于onCheckedChanged(),您需要实现RadioGroup.OnCheckedChangeListener,而不是CompoundButton.OnCheckedChangeListenerCompoundButton 使用布尔值,而RadioGroup 使用整数。

import android.widget.CompoundButton.OnCheckedChangeListener;

应该是

import android.widget.RadioGroup.OnCheckedChangeListener;

【讨论】:

  • 嗨,由于某种原因,它不会让我添加以下方法: public void onCheckedChanged(RadioGroup group, int checkedId){} 当它是一个常规类时,所以我需要把它作为一个摘要,以使其发挥作用。有没有一种方法可以添加该方法而无需将 TutorialOne 作为摘要?就像,我想使用与教程视频相同的方法,因为它返回 int。所以我可以使用开关盒。 eclipse让我使用的是这个:@Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO 自动生成的方法存根 }
  • 使其抽象只是隐藏您没有正确覆盖OnCheckedChangeListener 接口方法。使其非抽象,然后修复覆盖,使签名为boolean isChecked,而不是int isChecked
  • 非常感谢。让我试试看。
  • 您好,我根据您告诉我的操作对其进行了更改,并遇到了一些错误/建议,所以我只是按照编译器告诉我的操作进行操作。遇到了这个问题:我必须创建一个OncheckedChangedListner 的接口,我做到了,但它仍然给我错误
  • Nvm。我明白了 :) 我完全按照你告诉我的去做了,现在它起作用了。我避免了他们一直告诉我做的硬编码。反正。非常感谢。
【解决方案2】:

为了使用 onCheckedChanged() 方法,您需要一个监听器来获取该方法。使用由方法定义的匿名类侦听器或在 onCreate() 方法中执行此操作,如下所示:

button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
    @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
            /*Do things here*/
        }
    });

【讨论】:

    【解决方案3】:

    感谢大家的帮助,我能够为 TutorialOne 生成一个新代码,但我不知道为什么我无法使用以下选项:左、右、正常、斜体、粗体。这是教程一的新代码,我还根据 Kcoppock 的建议更改了 Main java 中的 Intent。

    这是我的新代码:

    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; 
    
    
        }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2011-08-17
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多