2015-04-22 134 views
2

我正在将Parse集成到现有的Android应用程序中。这就是说,跟随他们的文档,我已成功地创建以下的编译错误:错误:(31,39)错误:无法找到符号变量上下文

Error:(31, 39) error: cannot find symbol variable context 

创建此错误的代码如下。

import android.content.Intent; 
import android.os.Bundle; 
import android.provider.SyncStateContract; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 

import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.UiLifecycleHelper; 
import com.facebook.model.GraphUser; 
import com.parse.Parse; 
import com.parse.ParseFacebookUtils; 

public class MainActivity extends ActionBarActivity { 
    // Create, automatically open (if applicable), save, and restore the 
    // Active Session in a way that is similar to Android UI lifecycles. 
    private UiLifecycleHelper uiHelper; 
    private View otherView; 
    private static final String TAG = "MainActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Parse.initialize(this, "PARSE APPLICATION ID REMOVED FOR SECURITY REASONS", "PARSE CLIENT ID REMOVED FOR SECURITY REASONS"); 
     ParseFacebookUtils.initialize(context); 
     setContentView(R.layout.activity_main); 
     // Set View that should be visible after log-in invisible initially 
     otherView = (View) findViewById(R.id.other_views); 
     otherView.setVisibility(View.GONE); 
     // To maintain FB Login session 
     uiHelper = new UiLifecycleHelper(this, callback); 
     uiHelper.onCreate(savedInstanceState); 
    } 

    // Called when session changes 
    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
         Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    // When session is changed, this method is called from callback method 
    private void onSessionStateChange(Session session, SessionState state, 
             Exception exception) { 
     final TextView name = (TextView) findViewById(R.id.name); 
     final TextView gender = (TextView) findViewById(R.id.gender); 
     final TextView location = (TextView) findViewById(R.id.location); 
     // When Session is successfully opened (User logged-in) 
     if (state.isOpened()) { 
      Log.i(TAG, "Logged in..."); 

      //Opens new activity view so user can edit profile. 
      startActivity(new Intent(MainActivity.this, SetupProfileActivity.class)); 

      /*// make request to the /me API to get Graph user 
      Request.newMeRequest(session, new Request.GraphUserCallback() { 

       // callback after Graph API response with user 
       // object 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 
        if (user != null) { 
         // Set view visibility to true 
         otherView.setVisibility(View.VISIBLE); 
         // Set User name 
         name.setText("Hello " + user.getName()); 
         // Set Gender 
         gender.setText("Your Gender: " 
           + user.getProperty("gender").toString()); 
         location.setText("Your Current Location: " 
           + user.getLocation().getProperty("name") 
           .toString()); 
        } 
       } 
      }).executeAsync();*/ 

     } else if (state.isClosed()) { 
      Log.i(TAG, "Logged out..."); 
      otherView.setVisibility(View.GONE); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     ParseFacebookUtils.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
     Log.i(TAG, "OnActivityResult..."); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     uiHelper.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     uiHelper.onSaveInstanceState(outState); 
    } 
} 

根据解析的documentation我应该叫ParseFacebookUtils.initialize(背景);在我的onCreate方法中,我做了。但是,即使我已经导入了所有相关的类,编译器仍无法找到符号引用。

通过StackOverflow和Google搜索我知道这是与编译器无法找到上下文有关,所以我想知道如果我在错误的地方初始化它,或者我需要重写onCreate函数(我认为我已经做了)。

在此先感谢您的帮助。

+0

你看着http://stackoverflow.com/a/8086225/603270? – shkschneider

+0

这是我发布我的最后一个问题。 –

回答

4

如果您想传递上下文,请使用this(即Activity实例)。

变化

ParseFacebookUtils.initialize(context); 

ParseFacebookUtils.initialize(this); 
+0

解决了这个问题。为了将来引用其他人(和我自己),你能解释为什么我需要调用这个特定的实例,而不仅仅是上下文吗?我假设因为这是第一个电话? –

+1

'context'是一个标识符。你没有在你的代码中声明任何叫做'context'的标识符,这就是你得到这个错误的原因。一个Activity是一个Context,这就是为什么'this'可以传递给'initialize'方法的原因。 – Eran

相关问题