Android - сбой приложения без определенного интервала времени

Я использую Facebook SDK в своем приложении, но мое приложение вылетает после нажатия кнопки входа. Но время не установлено. Иногда он вылетает после того, как я вошел в систему, иногда в тот момент, когда я нажимаю кнопку входа в систему, иногда между ними, когда я заполняю данные для входа.

Также может кто-нибудь сказать мне, почему общие настройки не работают.

MainActivity.this

import com.facebook.android.FacebookError;
import com.facebook.android.Facebook.DialogListener;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    Facebook fb;
    ImageView login;
    SharedPreferences sp;
    String APP_ID = "123456";
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fb = new Facebook(APP_ID);
        sp = getPreferences(MODE_PRIVATE);
        String access_token = sp.getString("access_token", null);
        long expires = sp.getLong("expires", 0);
        if (access_token != null) {
            fb.setAccessToken(access_token);
        }
        if (expires != 0) {
            fb.setAccessExpires(expires);
        }
        login = (ImageView) findViewById(R.id.imageView1);
        login.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v.getId() == R.id.imageView1) {
            fbLogin();
        }
    }

    private void fbLogin() {
        if (fb.isSessionValid()) {
            Intent i = new Intent(MainActivity.this, com.example.test.Register.class);
            startActivity(i);
        } else {
            fb.authorize(MainActivity.this, new String[] { "email" },
                    new DialogListener() {

                        @Override
                        public void onFacebookError(FacebookError e) {
                            // TODO Auto-generated method stub
                            e.printStackTrace();
                            Toast.makeText(MainActivity.this, "fbError",Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onError(DialogError e) {
                            // TODO Auto-generated method stub
                            e.printStackTrace();
                            Toast.makeText(MainActivity.this, "onError",Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onComplete(Bundle values) {
                            // TODO Auto-generated method stub
                            Editor editor = sp.edit();
                            editor.putString("access_token",fb.getAccessToken());
                            editor.putLong("access_expires",fb.getAccessExpires());
                            editor.commit();
                            Intent i = new Intent(MainActivity.this, com.example.test.Register.class);
                            startActivityForResult(i, RESULT_OK);
                        }

                        @Override
                        public void onCancel() {
                            // TODO Auto-generated method stub
                            Toast.makeText(MainActivity.this, "onCancel",Toast.LENGTH_SHORT).show();
                        }
                    });
        }
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        fb.authorizeCallback(requestCode, resultCode, data);
    }

}

Итак, пожалуйста, кто-нибудь может помочь мне определить:

  1. Почему приложение вылетает в любой момент после нажатия на кнопку входа.
  2. Почему общие настройки не работают.

Логкэт

03-31 00:31:47.459: E/AndroidRuntime(5121): FATAL EXCEPTION: Timer-0
03-31 00:31:47.459: E/AndroidRuntime(5121): java.lang.NoClassDefFoundError: android.support.v4.content.LocalBroadcastManager
03-31 00:31:47.459: E/AndroidRuntime(5121):     at com.facebook.AppEventsLogger.flushAndWait(AppEventsLogger.java:760)
03-31 00:31:47.459: E/AndroidRuntime(5121):     at com.facebook.AppEventsLogger.access$1(AppEventsLogger.java:732)
03-31 00:31:47.459: E/AndroidRuntime(5121):     at com.facebook.AppEventsLogger$2.run(AppEventsLogger.java:605)
03-31 00:31:47.459: E/AndroidRuntime(5121):     at java.util.Timer$TimerImpl.run(Timer.java:284)
03-31 00:31:47.589: D/OpenGLRenderer(5121): Flushing caches (mode 0)
03-31 00:31:50.319: I/Process(5121): Sending signal. PID: 5121 SIG: 9

person Lakshay Chhikara    schedule 30.03.2014    source источник
comment
Взгляд на logcat должен помочь   -  person donfuxx    schedule 30.03.2014
comment
@donfuxx Должен ли я опубликовать весь логарифм или те, которые имеют в нем уровень E? Я спрашиваю об этом, потому что я не знаю, какая вся информация, такая как ключ приложения, токены доступа, также присутствует в нем.   -  person Lakshay Chhikara    schedule 30.03.2014
comment
Я думаю, журналов ошибок должно быть достаточно, и да, не включайте свои закрытые ключи.   -  person donfuxx    schedule 30.03.2014
comment
@donfuxx Я добавил ошибки в последнюю очередь. Эти помогают?   -  person Lakshay Chhikara    schedule 30.03.2014
comment
Ваше приложение включает библиотеку поддержки v4?   -  person donfuxx    schedule 30.03.2014
comment
@donfuxx Да, он присутствует в папке libs. И я также включил android-support-v4.jar в свойства --->Путь сборки Java   -  person Lakshay Chhikara    schedule 30.03.2014
comment
Тогда, возможно, посмотрите этот связанный ответ stackoverflow.com/a/19771182/2399024   -  person donfuxx    schedule 30.03.2014
comment
@donfuxx Спасибо, это действительно решило мою проблему. Теперь приложение не вылетает. Кроме того, не могли бы вы сказать мне, почему общие настройки не работают? Я должен войти в систему каждый раз.   -  person Lakshay Chhikara    schedule 30.03.2014


Ответы (1)


О проблеме с вашими общими настройками:

Похоже, вы ищете здесь не тот ключ:

long expires = sp.getLong("expires", 0);

вы должны изменить его на:

long expires = sp.getLong("access_expires", 0);

потому что позже вы действительно сохраните это в общих настройках:

editor.putLong("access_expires",fb.getAccessExpires());
editor.commit();

Примечание. Другая проблема с NoClassDefFoundError была решена с помощью этого соответствующего ответа

person donfuxx    schedule 30.03.2014