开发者

Error using Twitter

I am using springframework for twitter activity but when we click on twitter button it sends class cast actvity. I don't know why bcoz same code is running in different project. Please help me out.

Error Stack:

05-09 15:05:34.086: ERROR/AndroidRuntime(1711): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.shopzilla.android.common/org.shopzilla.android.twitter.TwitterActivity}: java.lang.ClassCastException: android.app.Application
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.os.Looper.loop(Looper.java:123)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.app.ActivityThread.main(ActivityThread.java:3683)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at java.lang.reflect.Method.invokeNative(Native Method)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at java.lang.reflect.Method.invoke(Method.java:507)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at dalvik.system.NativeStart.main(Native Method)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711): Caused by: java.lang.ClassCastException: android.app.Application
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at org.shopzilla.android.common.AbstractAsyncActivity.getApplicationContext(AbstractAsyncActivity.java:40)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at org.shopzilla.android.twitter.TwitterActivity.onCreate(TwitterActivity.java:53)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

Code:

/*
 * Copyright 2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.shopzilla.android.twitter;

import org.shopzilla.android.common.AbstractAsyncActivity;
import org.shopzilla.android.common.R;
import org.springframework.social.connect.ConnectionRepository;
import org.springframework.social.twitter.api.TwitterApi;
import org.springframework.social.twitter.connect.TwitterConnectionFactory;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * @author Roy Clarkson
 */
public class TwitterActivity extends AbstractAsyncActivity 
{
    protected static final String TAG = TwitterActivity.class.getSimpleName();

    private ConnectionRepository _connectionRepository;

    private TwitterConnectionFactory _connectionFactory;


    //***************************************
    // Activity methods
    //***************************************
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.twitter_activity_layout);

        _connectionRepository = getApplicationContext().getConnectionRepository();
        _connectionFactory = getApplicationContext().getTwitterConnectionFactory();
    }

    @Override
    public void onStart() 
    {
        super.onStart();

        if (isConnected())
        {
            showTwitterOptions();
        }
        else
        {
            showConnectOption();
        }
    }


    //***************************************
    // Private methods
    //***************************************
    private boolean isConnected() 
    {
        return _connectionRepository.findPrimaryConnectionToApi(TwitterApi.class) != null;
    }

    private void disconnect()
    {
        _connectionRepository.removeConnectionsToProvider(_connectionFactory.getProviderId());
    }

    private void showConnectOption()
    {
        String[] options = {"Connect"};
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, options);
        ListView listView = (ListView) this.findViewById(R.id.twitter_activity_options_list);
        listView.setAdapter(arrayAdapter);

        listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() 
                {
                    public void onItemClick(AdapterView<?> parentView, View childView, int position, long id) 
                    {
                        switch(position)
                        {
                            case 0:
                                displayTwitterAuthorization();
                                break;
                            default:
                                break;
                        }
                    }
                }
            );
    }

    private void showTwitterOptions()
    {
        String[] options = {"Disconnect", "View Profile", "Timeline", "Tweet", "Direct Message"};
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.s开发者_运维知识库imple_list_item_1, options);
        ListView listView = (ListView) this.findViewById(R.id.twitter_activity_options_list);
        listView.setAdapter(arrayAdapter);

        listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() 
                {
                    public void onItemClick(AdapterView<?> parentView, View childView, int position, long id) 
                    {
                        Intent intent;
                        switch(position)
                        {
                            case 0:
                                disconnect();
                                showConnectOption();
                                break;
                            case 1:
                                intent = new Intent();
                                intent.setClass(parentView.getContext(), TwitterProfileActivity.class);
                                startActivity(intent);
                                break;
                            case 2:
                                intent = new Intent();
                                intent.setClass(parentView.getContext(), TwitterTimelineActivity.class);
                                startActivity(intent);
                                break;
                            case 3:
                                intent = new Intent();
                                intent.setClass(parentView.getContext(), TwitterTweetActivity.class);
                                startActivity(intent);
                                break;
                            case 4:
                                intent = new Intent();
                                intent.setClass(parentView.getContext(), TwitterDirectMessageActivity.class);
                                startActivity(intent);
                                break;
                            default:
                                break;
                        }
                    }
                }
            );
    }

    private void displayTwitterAuthorization()
    {
        Intent intent = new Intent();
        intent.setClass(this, TwitterWebOAuthActivity.class);
        startActivity(intent);
        finish();
    }
}

Abstract Async Activity

/*
 * Copyright 2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.shopzilla.android.common;

import android.app.Activity;
import android.app.ProgressDialog;

/**
 * @author Roy Clarkson
 * @author Pierre-Yves Ricau
 */
public abstract class AbstractAsyncActivity extends Activity implements AsyncActivity
{
    protected static final String TAG = AbstractAsyncActivity.class.getSimpleName();

    private ProgressDialog _progressDialog;

    private boolean _destroyed = false;


    //***************************************
    // Activity methods
    //***************************************
    @Override
    public MainApplication getApplicationContext()
    {
        return (MainApplication) super.getApplicationContext();
    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        _destroyed = true;
    }


    //***************************************
    // Public methods
    //***************************************
    public void showLoadingProgressDialog()
    {
        this.showProgressDialog("Loading. Please wait...");
    }

    public void showProgressDialog(CharSequence message)
    {
        if (_progressDialog == null)
        {
            _progressDialog = new ProgressDialog(this);
            _progressDialog.setIndeterminate(true);
        }

        _progressDialog.setMessage(message);
        _progressDialog.show();
    }

    public void dismissProgressDialog()
    {
        if (_progressDialog != null && !_destroyed)
        {
            _progressDialog.dismiss();
        }
    }
}


The problem lies in a class you did not show:

05-09 15:05:34.086: ERROR/AndroidRuntime(1711): Caused by: java.lang.ClassCastException: android.app.Application
05-09 15:05:34.086: ERROR/AndroidRuntime(1711):     at org.shopzilla.android.common.AbstractAsyncActivity.getApplicationContext(AbstractAsyncActivity.java:40)

Check AbstractAsyncActivity line 40 :

return (MainApplication) super.getApplicationContext();

Did you specify the MainApplication as Application in the android manifest? Otherwise getApplicationContext() will not return what you need.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜