[英]class not found exception occur when correct class supplied in android
這是我的Activity類中的代碼部分。 這是onListItemClick
方法。 我使用String數組輸入菜單活動類名稱。 classes
是數組。
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String cheese = classes[position];
try {
Class ourClass = Class.forName("com.example.image_and_sound_app."+cheese);
Intent ourIntent = new Intent(Menu.this,ourClass);
startActivity(ourIntent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
但是當我單擊列表項時會發生異常
nd_sound_app.app W/System.err﹕ Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.image_and_sound_app.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.image_and_sound_app.app-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.image_and_sound_app.app-2, /system/lib]]
07-09 15:50:14.220 1288-1288/com.example.image_and_sound_app.app W/System.err﹕ at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
07-09 15:50:14.220 1288-1288/com.example.image_and_sound_app.app W/System.err﹕ at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
07-09 15:50:14.220 1288-1288/com.example.image_and_sound_app.app W/System.err﹕ at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
已經存在MainActivity
類。 但是異常表明找不到該類。 我該如何解決?
所以您給錯了班級名稱。 MainActivity類名稱不是:com.example.image_and_sound_app.MainActivity。 仔細檢查主要活動的所屬包名稱。 別無所求。
抱歉,如果我不使用comment選項,我的代表就太低了。 我知道如何幫助你...
我看到您在buckysroom上執行了Android教程。
您在上面的注釋中寫的不是mainactivity的聲明。 您僅在此處建立到活動本身的鏈接。
String classes[] = {"MainActivity", "TextPlay", "Email", "Notebook", "example4", "example5", "example6" };
此行僅是數組,以后的代碼將在該數組中建立鏈接。
Class ourClass = null;
try {
ourClass = Class.forName("com.awo.travistut."+links);
Intent ourIntent = new Intent(Menu.this, ourClass);
startActivity(ourIntent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
這是缺少的主要課程:
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SoundEffectConstants;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
int counter;
Button add, sub;
TextView display;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
counter = 0;
add = (Button) findViewById(R.id.bAdd);
sub = (Button) findViewById(R.id.bDelete);
display = (TextView) findViewById(R.id.tvDisplay);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter = counter+1;
display.setText("Your total is " + counter);
v.playSoundEffect(SoundEffectConstants.CLICK);
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter = counter-1;
display.setText("Your total is " + counter);
v.playSoundEffect(SoundEffectConstants.CLICK);
}
});
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPause(){
super.onPause();
finish();
}
}
這是構建其導航的菜單代碼:
public class Menu extends ListActivity {
String classes[] = {"MainActivity", "TextPlay", "Email", "Notebook", "example4", "example5", "example6" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, classes));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String links = classes[position];
Class ourClass = null;
try {
ourClass = Class.forName("com.awo.travistut."+links);
Intent ourIntent = new Intent(Menu.this, ourClass);
startActivity(ourIntent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
為什么你們將解決方法拉到簡單的問題上? 除了使用反射,您還可以執行更有效,更可靠的方法。 這是您的代碼:
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String cheese = classes[position];
try {
Class ourClass = Class.forName("com.example.image_and_sound_app."+cheese);
Intent ourIntent = new Intent(Menu.this,ourClass);
startActivity(ourIntent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
假設類為:
private static final String[] classes = {
"A",
"B",
"C"
};
等等。 與其動態地構建類,不如構建它們!
private static final Class<?>[] classes = {
A.class,
B.class,
C.class
};
...
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id); // this line is redundant
Class<?> ourClass = classes[position];
Intent ourIntent = new Intent(Menu.this,ourClass);
startActivity(ourIntent);
}
導航處理也有很好的模式,但我不知道您是否會使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.