1

AndroidでEclipseを使用してアプリケーションを作成しています。タブ付きのActiviyの1つからMainActivityに新しいインテントを作成する関数を作成するまで、ソフトウェアは問題なく動作していました。その後、動作を停止し、実行するたびに「forceclosedapplication」エラーが発生しました。その後、その関数を削除しましたが、エラーが解決しません。

これが私のコードです、

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: android.text.TextLine@40871fb0
08-08 22:20:10.530: V/TLINE(2142): new: android.text.TextLine@40872bf8
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

「コンテンツには、id属性が「android.R.id.tabhost」であるTabHostが必要です」というエラーがここでの主なエラーのようですが、オンラインで見ると、これは通常、idタグを設定しないことが原因であることがわかりました。 'tabbed_main.xml'で適切に設定されていますが、私は間違いなくその権利を設定しています。私は何時間もオンラインとコードを調べてきましたが、なぜそれが機能しないのかわかりません。どんな助けでも大歓迎です!ありがとう。

4

3 に答える 3

3

そうですね、なんとか問題点がわかったので、シェアしたいと思いました。問題は、TabActivity内でSharedPreferences関数を使用することにありました。拡張機能をActivityに変更し、新しいMainTabbedActivityを作成して、タブレイアウトのタブを生成すると、すべてが正常に機能しました。

これがなぜであるかは100%わかりませんが、コンテキストと関係があるのではないかと思います。TabActivityを間違って使用していた可能性があります。これは、アクティビティが実行するのはタブレイアウトのタブを生成することだけであり、関数を実行しないためです。(それが機能しない正確な理由を誰かが知っているなら、コメントしてください、私は知りたいです!)

したがって、将来同様の問題が発生する場合は、メインアクティビティで必要なことをすべて実行してから、そのようにTabActivityへのインテントを作成します。

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
           // Once logged in, display tabbed layouts
                Intent i = new Intent(getApplicationContext(), MainTabbedActivity.class);
                startActivity(i);

        }

    // else, username has not been stored, prompt login
        else{
                setContentView(R.layout.login);
            }

}
于 2012-08-09T11:41:49.350 に答える
0

上手、

よくわかりませんが、この回答によると、彼が交代したら

android:id="@android:id/tabhost"

android:id="@+id/tabhost"

それは彼のために働いた..それを試してみてください。

編集 それはうまくいかなかったので、その下の答えは、彼がR.javaファイルを削除することによってこれが機能するようになり、IDEがそれを再生成すると(おそらく再構築することによって)それが機能したことを示しました幸運

于 2012-08-08T21:40:43.317 に答える
-1

xmlファイルの名前を、tabbed_main.xmlではなくmain.xmlなどの一意の名前に変更します。また、プロジェクトをクリーンアップしてRファイルを削除します(再生成されます)。問題が解決する場合もあります。

于 2012-08-08T21:50:48.810 に答える