2013-12-18 90 views
1

我想在我的android應用程序中擴展另一個不是活動。但是當我在清單文件中初始化它後運行應用程序時,它顯示異常class cannot be cast to android.app.activity我該如何解決這個問題? 編輯: 這是我的類文件SessionLoginSampleActivity.java這就要求FacebookSignIn例外:類不能轉換爲android.app.activity

public class SessionLoginSampleActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 
     Session session = Session.getActiveSession(); 
     if (session == null) { 
      if (savedInstanceState != null) { 
       session = Session.restoreSession(this, null, statusCallback, savedInstanceState); 
      } 
      if (session == null) { 
       session = new Session(this); 
      } 
      Session.setActiveSession(session); 
      if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
       session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
      }  } 
     updateView(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Session.getActiveSession().addCallback(statusCallback); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Session.getActiveSession().removeCallback(statusCallback); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     Session session = Session.getActiveSession(); 
     Session.saveSession(session, outState); 
    } 
    private void updateView() { 
     Session session = Session.getActiveSession(); 
     if (session.isOpened()) { 
      startActivityForResult(new Intent(SessionLoginSampleActivity.this, FacebookSignIn.class), 100); 
      } 
     else{ 
      onClickLogin();  } } 

    private void onClickLogin() { 
     Session session = Session.getActiveSession(); 
     if (!session.isOpened() && !session.isClosed()) { 
      session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
     } else { 
      Session.openActiveSession(this, true, statusCallback); 
     } } 

    private void onClickLogout() { 
     Session session = Session.getActiveSession(); 
     if (!session.isClosed()) { 
      session.closeAndClearTokenInformation(); 
     } } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 
    private class SessionStatusCallback implements Session.StatusCallback { 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      updateView(); 
     } } } 

FacebookSignIn.java

public class FacebookSignIn extends FacebookFragment{ 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    fetchUserInfo(); 
    if(databaseExists()!=false) 
    { 
      if(!checkValidUser()!=true){ 
       Intent intent = new Intent(getActivity(),UserAccount.class); 
       startActivity(intent); 
       /*Sending some arguments*/ 
       Bundle bundle = new Bundle(); 
        bundle.putString("UserName",strUserName); 
        bundle.putString("Id", strEmailId); 
        intent.putExtras(bundle); 
       this.startActivity(intent); 
     }}} 
private boolean databaseExists(){ 
    SQLiteDatabase checkDB = null;  
    try {  
     String myPath = DB_PATH + DATABASE_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null,SQLiteDatabase.OPEN_READONLY); 
     if(checkDB != null){ 
      System.out.println("DataBase Exists"); 
      checkDB.close(); 
      return true; 
     }else{ 
      //database does not exist 
      return false; 
     }  
    } catch (Exception e){ 
     //database does not exist   
     return false; 
    }} 

private Boolean checkValidUser(){ 
    Cursor cursor = null; 
    try{ 
     cursor = database.rawQuery("SELECT loginId, emailAddress FROM UserDetails WHERE loginId = '"+NAME+"' AND emailAddress = '"+ID+"'", null); 
     if (cursor != null) { 
      if (cursor.moveToFirst()){ 
       strUserName = cursor.getString(cursor.getColumnIndex("loginId")); 
       strEmailId = cursor.getString(cursor.getColumnIndex("emailAddress")); 
         }}   
    }catch (Exception e) { 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
    }finally { 
     if(cursor != null && !cursor.isClosed()) cursor.close(); 
    } 
    return true; 
}  
private void fetchUserInfo() { 
    final Session currentSession = getSession(); 
    if (currentSession != null && currentSession.isOpened()) { 
     if (currentSession != userInfoSession) { 
      Request request = Request.newMeRequest(currentSession, new Request.GraphUserCallback() { 
       @Override 
       public void onCompleted(GraphUser me, Response response) { 
        if (currentSession == getSession()) { 
         user = me;       
         updateUI(); 
        } 
        if (response.getError() != null) { 
         //loginButton.handleError(response.getError().getException()); 
        }}}); 
      Bundle parameters = new Bundle(); 
      parameters.putString(FIELDS, REQUEST_FIELDS); 
      request.setParameters(parameters); 
      Request.executeBatchAsync(request); 
      userInfoSession = currentSession; 
     } 
    } else { 
     user = null; 
    }} 

private void updateUI() { 
    if (!isAdded()) { 
     return; 
    } 
    if (isSessionOpen()) { 
     // connectedStateLabel.setTextColor(getResources().getColor(R.color.com_facebook_usersettingsfragment_connected_text_color)); 
     // connectedStateLabel.setShadowLayer(1f, 0f, -1f, 
       // getResources().getColor(R.color.com_facebook_usersettingsfragment_connected_shadow_color)); 

     if (user != null) { 
      ImageRequest request = getImageRequest(); 
      if (request != null) { 
       URI requestUrl = request.getImageUri(); 
       // Do we already have the right picture? If so, leave it alone. 
       //if (!requestUrl.equals(connectedStateLabel.getTag())) { 
        if (user.getId().equals(userProfilePicID)) { 

        } else { 
         ImageDownloader.downloadAsync(request); 
        }}}}} 

private ImageRequest getImageRequest() { 
    ImageRequest request = null; 
    try { 
     ImageRequest.Builder requestBuilder = new ImageRequest.Builder(
       getActivity(), 
       ImageRequest.getProfilePictureUrl(
         user.getId(), 
         getResources().getDimensionPixelSize(R.dimen.com_facebook_usersettingsfragment_profile_picture_width), 
         getResources().getDimensionPixelSize(R.dimen.com_facebook_usersettingsfragment_profile_picture_height))); 

     request = requestBuilder.setCallerTag(this) 
       .setCallback(
         new ImageRequest.Callback() { 
          @Override 
          public void onCompleted(ImageResponse response) { 
           processImageResponse(user.getId(), response); 
          }}) 
       .build(); 
    } catch (URISyntaxException e) { 
    } 
    return request; 
} 

private void processImageResponse(String id, ImageResponse response) { 
    if (response != null) { 
     Bitmap bitmap = response.getBitmap(); 
     if (bitmap != null) { 
      BitmapDrawable drawable = new BitmapDrawable(FacebookSignIn.this.getResources(), bitmap); 
      drawable.setBounds(0, 0, 
        getResources().getDimensionPixelSize(R.dimen.com_facebook_usersettingsfragment_profile_picture_width), 
        getResources().getDimensionPixelSize(R.dimen.com_facebook_usersettingsfragment_profile_picture_height)); 
      userProfilePic = drawable; 
      userProfilePicID = id; 

     } } }} 
+0

您正在使用您的課程作爲一項活動。但事實並非如此。如果你沒有向我們展示代碼,就不可能說你在哪裏出錯,但基本上它應該是顯而易見的,如果你按照你使用某個活動的方式使用某些東西,那麼它可能只是一個(或者是其中一個孩子) – Nanne

+0

你確定「UserAccount」是你的活動?你並沒有試圖將FacebookSignIn添加到你的清單文件中。 – Piyush

+0

不,引發異常當我在SessionLoginSampleActivity中調用FacebookSignIn – Robert

回答

0

你不需要申報比在Android清單活動的其他類。

只添加擴展活動的類。像FragmentActivity,Activity等。

希望這有助於

+0

但是當我編譯時,它顯示異常「你是否在AndroidManifest.xml中聲明瞭這個活動」。 – Robert

+0

然後請粘貼您的代碼 –

0

你要開始爲可能的活動UserAccount,其實不是一個Activity

活動應通過一些中間子類直接或間接擴展android.app.Activity

相關問題