0

android.app.Application にサブクラスを作成して、アプリケーションにグローバル変数を作成しようとしています。インターネットでいくつかのチュートリアルに従いましたが、うまくいかないようです。Eclipse ではエラーは表示されませんが、アプリケーションを起動すると、次のエラーが表示されます: 残念ながら、アプリケーションは停止しました。

別の人がStackoverflowで同じ質問をしましたが、この解決策は私にはうまくいかないようです。

これが私のアプリケーションファイルです。どんな助けでも大歓迎です!

MainActivity.java

package com.app.app;

import org.apache.http.cookie.Cookie;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

TextView mTxtvName;

String cookie;
String username;
Cookie theRealCookie;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.overzichttablayout);

    mTxtvName = (TextView) findViewById(R.id.txtvName);

    Globals global = (Globals)getApplication();
    String username = global.getVariable("globUsername");
    String cookie = global.getVariable("globCookie");

    mTxtvName.setText(username);
}

}

Globals.java

package com.app.app;

import android.app.Application;

public class Globals extends Application {

private String globCookie = "null";
private String globUsername = "null";

public String getVariable(String someName) {
    if(someName == "globCookie")
    {
        return globCookie;
    }
    else if(someName == "globUsername")
    {
        return globUsername;
    }
    else
    {
        return null;
    }
}

public void setVariable(String someName, String someVariable) {
    if(someName == "globCookie")
    {
        this.globCookie = someVariable;
    }
    else if(someName == "globUsername")
    {
        this.globUsername = someVariable;
    }
}
}

アプリケーション マニフェスト

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.app.app"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="11" />
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" 
         android:theme="@android:style/Theme.Light.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="OverviewActivity" android:theme="@android:style/Theme.Light.NoTitleBar"></activity>
</application>
<application android:name="Globals" android:icon="@drawable/ic_launcher" android:label="@string/app_name" />

</manifest>

Log Cat (ショートエンド)

08:51:53.783: D/AndroidRuntime(1650): Shutting down VM
08:51:53.783: W/dalvikvm(1650): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
08:51:53.863: E/AndroidRuntime(1650): FATAL EXCEPTION: main
4

4 に答える 4

1

<application />エラーは、2 番目のタグを宣言したためだと思われます

最初のタグGlobalsで宣言する必要があります<application />

<application
    android:name="Globals" 
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

そして、この行を削除します:

<application android:name="Globals" android:icon="@drawable/ic_launcher" android:label="@string/app_name" />
于 2012-09-10T09:19:12.977 に答える
1

私の知る限り、1 つのマニフェストで 2 つのアプリケーションを作成することはできません。

代わりandroid:name="Globals"に、最初のApplicationタグ自体に追加します。

これがエラーの理由でない場合は、logcat メッセージ全体を投稿してください。

于 2012-09-10T09:19:16.660 に答える
0

null値でテキストビューを設定したためだと思います。== 演算子で 2 つの文字列を比較することはできません。代わりに equals() 関数を使用できます。すなわち。someName.equals("globCookie")

于 2012-09-10T09:18:05.690 に答える
0

例外の理由: マニフェスト ファイルに 2 つのアプリケーション タグが見つかりました。それを修正するには、マニフェスト行を置き換えます

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >

<application 
android:name="Globals"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >

そして、この行を削除します:

<application android:name="Globals" android:icon="@drawable/ic_launcher" android:label="@string/app_name" />

また、初期化される前に globCookie と globUsername を呼び出そうとしています。グローバルでオーバーライドonCreate()し、globCookie と globUsername をいくつかのデフォルト値に設定することができます。

于 2012-09-10T09:21:31.103 に答える