2012-12-10 62 views
1

這是我的非活性類:應用程序類返回空值

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

public class PostManager { 

    private Bundle bundle; 
    private Context context; 
    private Session session; 
    private String victimId=null; 

    public PostManager() { 
     SavedFriend savedFriend = new SavedFriend(); 
     bundle = savedFriend.getBundle(); 
     context = savedFriend.getContext(); 
     session = savedFriend.getSession(); 
     victimId = savedFriend.getfriendsId(); 

     Log.e("postManager", victimId); 
     Log.e("postManager", bundle.getString("message")); 
    } 
} 

這是我的應用程序類:

import java.util.List; 

import android.app.Application; 
import android.content.Context; 
import android.os.Bundle; 

import com.facebook.Session; 
import com.facebook.model.GraphUser; 

public class SavedFriend extends Application { 
    private List<GraphUser> selectedUsers; 
    private String friendsId; 
    private Session session; 
    private Bundle bundle; 
    private Context context; 

    public List<GraphUser> getSelectedUsers() { 
     return selectedUsers; 
    } 

    public void setSelectedUsers(List<GraphUser> selectedUsers) { 
     this.selectedUsers = selectedUsers; 
    } 

    public String getfriendsId() { 
     return friendsId; 
    } 

    public void setfriendsId(String id) { 
     this.friendsId = id; 
    } 

    public Session getSession(){ 
     return session; 
    } 

    public void setSession(Session session){ 
     this.session = session; 
    } 

    public void setContext(Context context){ 
     this.context = context; 
    } 

    public Context getContext(){ 
     return context; 
    } 

    public void setBundle(Bundle bundle){ 
     this.bundle = bundle; 
    } 

    public Bundle getBundle(){ 
     return bundle; 
    } 
} 

我用一個片段類(friendsId)應用程序類的數據這不是null。

當我從PostManager調用應用程序類的數據時,它返回null值。

我試圖看到friendsIdmessage的值Log.e。但它給了我nullPointer異常。

這是否意味着我在應用程序類的PostManager constructor中調用的所有值都爲空?如果是,我該怎麼辦?

我需要在我的PostManager類中的會話,applicationcontext,message,friendsId值。我可以將這些值傳遞給PostManager,但是這個類別被onReceive()alarm class調用,該類別延伸BroadcastReceiver,並且此報警是從延伸Fragment的另一個類別設置的。我需要的所有值都是由這個類創建的,除了friendsId,我不知道如何從第一課 - >警報類 - > postmanager類傳遞這些值。

在清單報警類:

<application android:name=".SavedFriend" 
    .......> 
    .... 
    <receiver android:name="package name.Alarm"/> 
    .... 
</application> 

回答

1

您建立Application子類的新實例,所以沒有這些成員變量將被設置。

取而代之,您可以使用this question中的方法,並存儲易於訪問您的Application的靜態變量。使用這樣的東西,而不是創建一個新的實例。

+0

謝謝。你知道如何獲得一個活動的上下文,而不是getApplicationContext()方法嗎? @wsanville – Shoshi

+0

如果您需要一個活動,請將其作爲參數傳遞。保持活動的引用通常不是一個好主意,它們的生命週期很容易錯誤地引用一個被破壞的活動。 – wsanville

+0

還有一個問題。如果用戶點擊主頁按鈕或返回按鈕,ApplicationContext會發生什麼?它會自動被操作系統摧毀還是會活着? @wsanville – Shoshi