我創造與Eclipse在Android的應用程序。我的軟件完美無缺地工作,直到我創建了一個函數,該函數從我的選項卡中的一個Activiy創建了一個新的意圖返回到MainActivity,然後它停止工作,每當我運行它時都會給出'強制關閉應用程序'錯誤。因爲我已經刪除的功能,但問題仍然存在,您的內容必須有一個TabHost其id屬性爲「android.R.id.tabhost」錯誤與Android應用
這裏是我的代碼,
包my.main;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.TabActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class MainActivity extends TabActivity {
HttpClient client = new HttpClient();
Security security = new Security();
//file name for storing persistent data for sessions
public static final String PREFS_SESSION = "AccountsFile";
public static String storedEmailName = "userEmail";
public static String storedPasswordName = "userPassword";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*check if username has been stored*/
// if stored info exists, log the user in with login details and display main layout
if(doesPersistExist(storedEmailName, PREFS_SESSION)){
// auto login user
try
{autologin();}
catch (UnsupportedEncodingException e)
{e.printStackTrace();}
setContentView(R.layout.tabbed_main);
// Once logged in, display tabbed layouts
// Generate tabes suing function generateTags()
// Generate tabs
generateTab("Scan", R.drawable.icon_tab_scan, ScanActivity.class);
generateTab("Recent", R.drawable.icon_tab_recent, RecentActivity.class);
generateTab("Favourites", R.drawable.icon_tab_favourites, FavouritesActivity.class);
generateTab("Settings", R.drawable.icon_tab_settings, SettingsActivity.class);
}
// else, username has not been stored, prompt login
else{
setContentView(R.layout.login);
}
}
// Auto login user if credentials already exist
public void autologin() throws UnsupportedEncodingException{
//deleted contents of function to save room - this function definitely works
}
// Function that logs a user out by deleting the store user credentials
public void logout(){
//Create a sharedPreferences instance
SharedPreferences persist = getSharedPreferences(PREFS_SESSION, 0);
// Delete stored username and password
persist.edit().remove(storedPasswordName).commit();
persist.edit().remove(storedEmailName).commit();
// Rteurn user to login screen
setContentView(R.layout.login);
}
/*storeString*/
//Persistently store a string - used for cookie name and value strings
public Boolean storeString(String PREF_NAME, String stringName, String stringValue){
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREF_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
//commit session name and value to memory
editor.putString(stringName, stringValue);
// Commit the edits
Boolean result = editor.commit();
return result;
}
/*retrieveStoredString*/
//retrieve a persistently stored string from function storeString()
public String retrieveStoredString(String PREF_NAME, String stringName){
SharedPreferences persist = getSharedPreferences(PREF_NAME, 0);
String result = persist.getString(stringName, null);
return result;
}
// Check if persistent store exists
public Boolean doesPersistExist(String key, String PREF_NAME){
SharedPreferences persist = getSharedPreferences(PREF_NAME, 0);
Boolean result = persist.contains(key);
return result;
}
// Function will generate a new tab
public void generateTab(String tabSpec, int id, Class activity){
TabHost tabHost = getTabHost();
// Tab for scan
TabSpec scanspec = tabHost.newTabSpec(tabSpec);
// setting Title and Icon for the Tab
scanspec.setIndicator(tabSpec, getResources().getDrawable(id));
// create intent to start new tabbed activity
Intent scanIntent = new Intent(this, activity);
scanspec.setContent(scanIntent);
// add the tab to the tab layout
tabHost.addTab(scanspec);
}
}
這是我tabbed_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
</TabHost>
我已經創造了在清單,正如我所說的,標籤式佈局完美地工作,直到我試圖添加功能,從那時起沒有奏效。這是logcat的日誌,
08-08 22:11:42.390: D/dalvikvm(1966): GC_FOR_ALLOC freed 37K, 5% free 6387K/6659K, paused 32ms
08-08 22:11:42.390: I/dalvikvm-heap(1966): Grow heap (frag case) to 6.834MB for 513744-byte allocation
08-08 22:11:42.440: D/dalvikvm(1966): GC_FOR_ALLOC freed 8K, 5% free 6881K/7175K, paused 35ms
08-08 22:11:42.490: D/AndroidRuntime(1966): Shutting down VM
08-08 22:11:42.490: W/dalvikvm(1966): threadid=1: thread exiting with uncaught exception (group=0x40226760)
08-08 22:11:42.490: E/AndroidRuntime(1966): FATAL EXCEPTION: main
08-08 22:11:42.490: E/AndroidRuntime(1966): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.main/my.main.MainActivity}: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.ActivityThread.access$1500(ActivityThread.java:122)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.os.Looper.loop(Looper.java:132)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.ActivityThread.main(ActivityThread.java:4028)
08-08 22:11:42.490: E/AndroidRuntime(1966): at java.lang.reflect.Method.invokeNative(Native Method)
08-08 22:11:42.490: E/AndroidRuntime(1966): at java.lang.reflect.Method.invoke(Method.java:491)
08-08 22:11:42.490: E/AndroidRuntime(1966): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
08-08 22:11:42.490: E/AndroidRuntime(1966): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
08-08 22:11:42.490: E/AndroidRuntime(1966): at dalvik.system.NativeStart.main(Native Method)
08-08 22:11:42.490: E/AndroidRuntime(1966): Caused by: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.TabActivity.onContentChanged(TabActivity.java:105)
08-08 22:11:42.490: E/AndroidRuntime(1966): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:245)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.Activity.setContentView(Activity.java:1780)
08-08 22:11:42.490: E/AndroidRuntime(1966): at my.main.MainActivity.onCreate(MainActivity.java:57)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
08-08 22:11:42.490: E/AndroidRuntime(1966): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1715)
08-08 22:11:42.490: E/AndroidRuntime(1966): ... 11 more
08-08 22:11:42.500: D/dalvikvm(1966): GC_CONCURRENT freed 61K, 4% free 7021K/7239K, paused 2ms+4ms
08-08 22:16:46.110: I/Process(1966): Sending signal. PID: 1966 SIG: 9
08-08 22:20:10.500: V/TLINE(2142): new: [email protected]
08-08 22:20:10.530: V/TLINE(2142): new: [email protected]
08-08 22:22:19.030: I/jdwp(2142): Ignoring second debugger -- accepting and dropping
08-08 22:22:21.210: I/jdwp(2205): Ignoring second debugger -- accepting and dropping
08-08 22:22:21.310: D/dalvikvm(2205): GC_FOR_ALLOC freed 39K, 5% free 6385K/6659K, paused 34ms
08-08 22:22:21.310: I/dalvikvm-heap(2205): Grow heap (frag case) to 6.833MB for 513744-byte allocation
08-08 22:22:21.370: D/dalvikvm(2205): GC_CONCURRENT freed 0K, 5% free 6887K/7175K, paused 3ms+2ms
08-08 22:22:21.400: D/AndroidRuntime(2205): Shutting down VM
08-08 22:22:21.400: W/dalvikvm(2205): threadid=1: thread exiting with uncaught exception (group=0x40226760)
08-08 22:22:21.410: E/AndroidRuntime(2205): FATAL EXCEPTION: main
08-08 22:22:21.410: E/AndroidRuntime(2205): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.main/my.main.MainActivity}: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.ActivityThread.access$1500(ActivityThread.java:122)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.os.Looper.loop(Looper.java:132)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.ActivityThread.main(ActivityThread.java:4028)
08-08 22:22:21.410: E/AndroidRuntime(2205): at java.lang.reflect.Method.invokeNative(Native Method)
08-08 22:22:21.410: E/AndroidRuntime(2205): at java.lang.reflect.Method.invoke(Method.java:491)
08-08 22:22:21.410: E/AndroidRuntime(2205): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
08-08 22:22:21.410: E/AndroidRuntime(2205): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
08-08 22:22:21.410: E/AndroidRuntime(2205): at dalvik.system.NativeStart.main(Native Method)
08-08 22:22:21.410: E/AndroidRuntime(2205): Caused by: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.TabActivity.onContentChanged(TabActivity.java:105)
08-08 22:22:21.410: E/AndroidRuntime(2205): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:245)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.Activity.setContentView(Activity.java:1780)
08-08 22:22:21.410: E/AndroidRuntime(2205): at my.main.MainActivity.onCreate(MainActivity.java:57)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
08-08 22:22:21.410: E/AndroidRuntime(2205): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1715)
08-08 22:22:21.410: E/AndroidRuntime(2205): ... 11 more
08-08 22:27:25.039: I/Process(2205): Sending signal. PID: 2205 SIG: 9
它看起來像「你的內容必須有一個TabHost其id屬性爲‘android.R.id.tabhost’錯誤」是主要的錯誤在這裏,但在網上搜索我發現這通常只是爲了不在'tabbed_main.xml'中正確設置id標記,但我已經明確地設置了這一點。我花了數小時在網上和通過代碼查找,但對於爲什麼它不起作用卻一無所知。任何幫助將不勝感激!謝謝。
刪除R.java,仍然獲得錯誤。 – rusty009 2012-08-08 21:54:52