2014-09-15 3 views
2

Я следил за учебными видеороликами здесь: http://www.youtube.com/watch?v=pZaRNVwKAy4&list=PLB03EA9545DD188C3&index=7 и натолкнулся на несколько ошибок, следуя инструкциям. Все работает нормально, пока я не начал работать над методом Tutorial: onCheckedChanged. Может кто-нибудь объяснить, что я делаю неправильно? Большое спасибо.Невозможно создать экземпляр программирования класса -android

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 Code

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 ява код

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> 
+0

ли это правильно объявить в вашем 'manifest.xml'? – codeMagic

ответ

2

TutorialOneActivity аннотация. Вы не можете создать абстрактный класс. В стороне, вы не должны быть hardcoding имя класса в любом случае. Если это то, что предлагает ваш учебник, я предлагаю зайти далеко, далеко.

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

EDIT: Что касается onCheckedChanged(), вам нужно реализовать RadioGroup.OnCheckedChangeListener, не CompoundButton.OnCheckedChangeListener. В поле CompoundButton используется логическое значение, а RadioGroup - целое число.

import android.widget.CompoundButton.OnCheckedChangeListener; 

должен быть

import android.widget.RadioGroup.OnCheckedChangeListener; 
+0

привет, по какой-то причине он не позволит мне добавить следующий метод: public void onCheckedChanged (группа RadioGroup, int checkedId) {}, когда он является обычным классом, поэтому мне нужно указать его как абстрактный, чтобы это работать.есть способ, которым я могу добавить этот метод w.out, ставя TutorialOne как абстрактный? Например, я хочу использовать тот же метод, что и учебное видео, потому что он возвращает int. поэтому я могу использовать корпус переключателя. те затмения позволяют мне использовать это один: \t @Override \t общественного недействительными onCheckedChanged (CompoundButton buttonView, логическое IsChecked) { \t \t // TODO Auto-генерироваться метод заглушки \t \t \t } – Chidori

+0

делает его аннотация просто скрывается что вы неправильно переопределяете методы интерфейса OnCheckedChangeListener. Сделайте это не абстрактным, а затем исправьте переопределение так, чтобы подпись была 'boolean isChecked', а не' int isChecked'. – kcoppock

+0

Большое спасибо. позвольте мне попробовать. – Chidori

0

Для того, чтобы использовать способ, который будет onCheckedChanged(), вам нужен слушатель, чтобы получить метод. Делайте это с помощью анонимного класса слушателя, определенного методом, или в методе OnCreate() как так:

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

благодаря помощи все, я был в состоянии генерировать новый код для TutorialOne, но я не знаю, почему я не могу получить варианты для работы: LEFT, Right, Normal, Italic, Bold. Вот новый код для учебника One, я также изменил Intent в Main java в соответствии с тем, что предложил Kcoppock.

Вот мой новый код:

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; 


    } 
} 
}