2016-08-02 2 views
0
私はアプリケーションのすべてにFacebookのようなボタンを追加することに取り組んでいます

は正常ですが、問題は、アプリケーションを実行し、正確に問題非機能追加のFacebookのLikeボタン

public class MainActivity extends AppCompatActivity { 

    Toolbar toolbar; 
    DrawerLayout mDrawerLayout; 
    NavigationView mNavigationView; 
    FragmentManager mFragmentManager; 
    FragmentTransaction mFragmentTransaction; 
    public static final String PROPERTY_REG_ID = "notifyId"; 
    private static final String PROPERTY_APP_VERSION = "appVersion"; 
    GoogleCloudMessaging gcm; 
    SharedPreferences preferences; 
    String reg_cgm_id; 
    static final String TAG = "MainActivity"; 
    private AdView mAdView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Settings.sdkInitialize(this); 
     LikeView likeView = (LikeView) findViewById(R.id.like_view); 
     likeView.setObjectId("https://m.facebook.com/DZ.4.EverR"); 
     likeView.setLikeViewStyle(LikeView.Style.STANDARD); 
     likeView.setAuxiliaryViewPosition(LikeView.AuxiliaryViewPosition.INLINE); 
     likeView.setHorizontalAlignment(LikeView.HorizontalAlignment.CENTER); 

     preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     if (toolbar != null) { 
      setSupportActionBar(toolbar); 

     } 

     //show admob banner ad 
     mAdView = (AdView) findViewById(R.id.adView); 
     mAdView.loadAd(new AdRequest.Builder().build()); 
     mAdView.setAdListener(new AdListener() { 

      @Override 
      public void onAdClosed() { 

      } 

      @Override 
      public void onAdFailedToLoad(int error) { 
       mAdView.setVisibility(View.GONE); 
      } 

      @Override 
      public void onAdLeftApplication() { 
      } 

      @Override 
      public void onAdOpened() { 
      } 

      @Override 
      public void onAdLoaded() { 
       mAdView.setVisibility(View.VISIBLE); 
      } 
     }); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mNavigationView = (NavigationView) findViewById(R.id.main_drawer) ; 

     mFragmentManager = getSupportFragmentManager(); 
     mFragmentTransaction = mFragmentManager.beginTransaction(); 
     mFragmentTransaction.replace(R.id.frame_container, new FragmentRecent()).commit(); 

     mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 

       menuItem.setChecked(true); 
       mDrawerLayout.closeDrawers(); 
       //setTitle(menuItem.getTitle()); 

       if (menuItem.getItemId() == R.id.drawer_recent) { 
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
        fragmentTransaction.replace(R.id.frame_container, new FragmentRecent()).commit(); 
       } 

       if (menuItem.getItemId() == R.id.drawer_category) { 
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
        fragmentTransaction.replace(R.id.frame_container, new FragmentCategory()).commit(); 
       } 

       if (menuItem.getItemId() == R.id.drawer_favorite) { 
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
        fragmentTransaction.replace(R.id.frame_container, new FragmentFavorite()).commit(); 
       } 

       if (menuItem.getItemId() == R.id.drawer_rate) { 
        final String appName = getPackageName(); 
        try { 
         startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appName))); 
        } catch (android.content.ActivityNotFoundException anfe) { 
         startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + appName))); 
        } 
       } 

       if (menuItem.getItemId() == R.id.drawer_more) { 
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.play_more_apps)))); 
       } 

       if (menuItem.getItemId() == R.id.drawer_setting) { 
        Intent i = new Intent(getBaseContext(), SettingsActivity.class); 
        startActivity(i); 
       } 

       return false; 
      } 

     }); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close); 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     mDrawerToggle.syncState(); 

     // init analytics tracker 
     ((Analytics) getApplication()).getTracker(); 

     // GCM 
     if (checkPlayServices()) { 
      gcm = GoogleCloudMessaging.getInstance(getApplicationContext()); 
      String reg_cgm_id = getRegistrationId(getApplicationContext()); 
      Log.i(TAG, "Play Services Ok."); 
      if (reg_cgm_id.isEmpty()) { 
       Log.i(TAG, "Find Register ID."); 
       registerInBackground(); 
      } 
     } else { 
      Log.i(TAG, "No valid Google Play Services APK found."); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 

     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem menuItem) { 
     switch (menuItem.getItemId()) { 

      case android.R.id.home: 
       onBackPressed(); 
       return true; 

      default: 
       return super.onOptionsItemSelected(menuItem); 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } 
     else { 
      super.onBackPressed(); 
     } 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     // analytics 
     GoogleAnalytics.getInstance(this).reportActivityStart(this); 

    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     // analytics 
     GoogleAnalytics.getInstance(this).reportActivityStop(this); 
    } 

    @Override 
    protected void onPause() { 
     mAdView.pause(); 
     super.onPause(); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mAdView.resume(); 

    } 

    @Override 
    protected void onDestroy() { 
     mAdView.destroy(); 
     super.onDestroy(); 
    } 

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

    private boolean checkPlayServices() { 
     int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this); 
     if (resultCode != ConnectionResult.SUCCESS) { 
      if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { 
       GooglePlayServicesUtil.getErrorDialog(resultCode, this, 9000).show(); 
      } else { 
       Log.i(TAG, "This device is not supported."); 
      } 
      return false; 
     } 
     return true; 
    } 

    private void storeRegistrationId(Context context, String regId) { 
     int appVersion = getAppVersion(context); 
     Log.i(TAG, "Saving regId on app version " + appVersion); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString(PROPERTY_REG_ID, regId); 
     editor.putInt(PROPERTY_APP_VERSION, appVersion); 
     editor.commit(); 
    } 

    private String getRegistrationId(Context context) { 
     String registrationId = preferences.getString(PROPERTY_REG_ID, ""); 
     if (registrationId.isEmpty()) { 
      Log.i(TAG, "Registration not found."); 
      return ""; 
     } 
     // Check if app was updated; if so, it must clear the registration ID 
     // since the existing regID is not guaranteed to work with the new 
     // app version. 
     int registeredVersion = preferences.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE); 
     int currentVersion = getAppVersion(context); 
     if (registeredVersion != currentVersion) { 
      Log.i(TAG, "Analytics version changed."); 
      return ""; 
     } 
     return registrationId; 

    } 

    private void registerInBackground() { 
     new AsyncTask<Void, Void, String>() { 
      @Override 
      protected String doInBackground(Void... params) { 
       String msg = ""; 
       try { 
        if (gcm == null) { 
         gcm = GoogleCloudMessaging.getInstance(MainActivity.this); 
        } 
        reg_cgm_id = gcm.register(getString(R.string.google_api_sender_id)); 
        msg = "Device registered, registration ID=" + reg_cgm_id; 
        Log.d(TAG, "ID GCM: " + reg_cgm_id); 
        sendRegistrationIdToBackend(); 
        storeRegistrationId(MainActivity.this, reg_cgm_id); 

       } catch (IOException ex) { 
        msg = "Error :" + ex.getMessage(); 
       } 
       return msg; 

      } 

      @Override 
      protected void onPostExecute(String msg) { 

      } 
     }.execute(null, null, null); 

    } 

    private static int getAppVersion(Context context) { 
     try { 
      PackageInfo packageInfo = context.getPackageManager() 
        .getPackageInfo(context.getPackageName(), 0); 
      return packageInfo.versionCode; 

     } catch (PackageManager.NameNotFoundException e) { 
      throw new RuntimeException("Could not get package name: " + e); 
     } 
    } 

    private void sendRegistrationIdToBackend() { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("token", reg_cgm_id)); 
     new HttpTask(null, MainActivity.this, Config.SERVER_URL + "/register.php", nameValuePairs, false).execute(); 
    } 
} 
+0

より多くの情報を必要としています。あなたはそれが動作しないと言うが、それは動作しません?それは応答しませんか?それはクラッシュしますか?ボタンをクリックしても機能しないのですか? – CaseyB

+0

アプリケーションがメッセージアプリケーションの表示を開始すると、アプリケーションが停止しました –

+0

これはクラッシュです。あなたのLogCatは何を言いますか? – CaseyB

答えて

0
あるかわからないときあなたがnullのLikeView上のメソッドを呼び出すsetObjectIdしようとしていることを言っている

java.lang.NullPointerException: Attempt to invoke virtual method 
    'void com.facebook.widget.LikeView.setObjectId(java.lang.String)' 
    on a null object reference at android.app.ActivityThread.performLaunchActivity 

これはあなたのログの重要な部分です。だから、コードのその部分を踏んで、なぜLikeViewがnullであるのかを理解してください。

+0

さて、この問題を解決するには –

+0

あなたのレイアウトファイルにLikeViewを実際に追加しましたか?それはlike_viewのidを持っていますか? – CaseyB

+0

はい、追加しました –

関連する問題