приложение для интеграции с Android - PullRequest
0 голосов
/ 18 декабря 2011

Я пытаюсь интегрировать приложение с открытым исходным кодом в мое приложение для Android. Я сделал приложение с открытым исходным кодом в качестве библиотечного приложения и также интегрировал XML в мой файл манифеста Android. Нет ошибок компиляции.

Первый экран - это экран входа в систему для приложения библиотеки, и при его вызове выдается ошибка исключения класса java lang по адресу:

m_app = (TodoApplication) getApplication();

исходный код loginscreen.java:

public class LoginScreen extends Activity {

final static String TAG = LoginScreen.class.getSimpleName();

private TodoApplication m_app;
private Button m_LoginButton;
private BroadcastReceiver m_broadcastReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.login);

    m_app = (TodoApplication) getApplication();

    // supposed to help with the banding on the green background



    findViewById(R.id.loginbackground).getBackground().setDither(true);

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.todotxt.todotxttouch.ACTION_LOGIN");
    m_broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent i = new Intent(context, TodoTxtTouch.class);
            startActivity(i);
            finish();
        }
    };
    registerReceiver(m_broadcastReceiver, intentFilter);

    m_LoginButton = (Button) findViewById(R.id.login);
    m_LoginButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            login();
        }
    });

    //final RemoteClient remoteClient = m_app.getRemoteClientManager()
        //  .getRemoteClient();
    //if (remoteClient.isAuthenticated()) {



        switchToTodolist();
    //}
}

private void switchToTodolist() {
    Intent intent = new Intent(this, TodoTxtTouch.class);
    startActivity(intent);
    finish();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(m_broadcastReceiver);
}


void login() {
    final RemoteClient client = m_app.getRemoteClientManager()
            .getRemoteClient();

    if (!client.isAvailable()) {
        Log.d(TAG, "Remote service " + client.getClass().getSimpleName()
                + " is not available; aborting login");
        Util.showToastLong(m_app, R.string.toast_login_notconnected);
    } else {
        RemoteLoginTask loginTask = client.getLoginTask();
        loginTask.showLoginDialog(this);
    }
}

}

Интегрированный код библиотеки в android manifest.xml:

<activity android:name="com.todotxt.todotxttouch.LoginScreen" android:label="@string/app_label"
        android:theme="@android:style/Theme.NoTitleBar"
        android:configChanges="keyboardHidden|orientation">     
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="com.todotxt.todotxttouch.category.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />            
        </intent-filter>


    </activity>

    <activity android:name="com.todotxt.todotxttouch.TodoApplication" /> 

    <activity android:name="com.todotxt.todotxttouch.Filter" android:label="Filter"
        android:theme="@android:style/Theme.NoTitleBar" />
    <activity android:name="com.todotxt.todotxttouch.Preferences" android:label="@string/set_preferences" />
    <activity android:name="com.todotxt.todotxttouch.AddTask" android:label="@string/addtask"
        android:theme="@android:style/Theme.NoTitleBar"
        android:configChanges="orientation|keyboardHidden"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>

    <activity-alias android:name="com.todotxt.todotxttouch.AddTaskShortcut"
        android:targetActivity="com.todotxt.todotxttouch.AddTask" android:label="@string/shortcut_addtask_name">
        <intent-filter>
            <action android:name="android.intent.action.CREATE_SHORTCUT" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity-alias>
    <activity-alias android:name="com.todotxt.todotxttouch.AddTaskShare"
        android:targetActivity="com.todotxt.todotxttouch.AddTask" android:label="@string/share_addtask_name">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity-alias>
    <activity android:name="com.todotxt.todotxttouch.HelpActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
    <activity android:name="com.todotxt.todotxttouch.TodoTxtTouch" android:theme="@android:style/Theme.NoTitleBar"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

Может ли кто-нибудь помочь мне разобраться в проблеме.

Позвольте мне объяснить далее: у меня есть файл с именем Todoapplication.java .... поэтому класс существует ... он вызывается из LoginScreen.java как

m_app = (TodoApplication) getApplication();

и вот где я получаю исключение класса java lang?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011

Я, возможно, получаю неправильный конец клюшки, поэтому заранее прошу богов программирования о прощении.

Предполагая, что вы разрабатываете в Eclipse, разве это не простой случай иметь проект в Eclipse систочник с открытым исходным кодом, который в свойствах проекта имеет отмеченную опцию isLibrary.

В свойствах ВАШЕГО проекта вы можете добавить библиотеку, и Eclipse перечислит библиотеку с открытым исходным кодом (и любые другие, у которых отмечена «isLibrary»).Не хотите ли вы просто выбрать проект с открытым исходным кодом и добавить его.Затем ваш проект добавит библиотеку и соберет заново?

Чтобы получить доступ к проекту с открытым исходным кодом, теперь к библиотеке, вы можете использовать операторы "import" для доступа к любым открытым методам.

Хорошим примером этого процесса установки с использованием проекта библиотеки с открытым исходным кодом является Actionbar Sherlock, для которого я написал учебное пособие на YouTube, которое наглядно демонстрирует то, что я только что написал.Его можно найти на http://www.youtube.com/watch?v=avcp6eD_X2k

0 голосов
/ 18 декабря 2011

Activity.getApplication() возвращает экземпляр класса приложения, который был объявлен в манифесте в элементе <application>. Я не вижу этого в вашем вставленном манифесте.

Недостаточно просто иметь класс приложения в вашем приложении. Он должен быть явно обозначен как один в манифесте.

...