Приложение Android закрывается на некоторых устройствах, но не на других - PullRequest
1 голос
/ 17 мая 2011

Я недавно выпустил свое приложение на торговой площадке. Я протестировал его на двух устройствах и нескольких эмуляторах, и он работал нормально. Однако сейчас я получаю несколько отчетов о сбоях со следующей ошибкой:

java.lang.RuntimeException: сбой при доставке результата ResultInfo {who = null, request = 32665, result = -1, data = Intent {(has extras)}} в действие {com.eden.statusphere / com .eden.statussphere.FacebookConnect}: java.lang.NullPointerException

Я передаю FacebookConnect только одну вещь: строку ... вот код. (Я использую easyandroidfacebooksdk)

private OnClickListener FacebookonListener = new OnClickListener() {
    public void onClick(View v) {
        try{

            ConnectivityManager cMgr = (ConnectivityManager) v.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);         
            NetworkInfo netInfo = cMgr.getActiveNetworkInfo();
            String status = netInfo.getState().toString();

            if (status.equals("CONNECTED")) {
                intent.putExtra(".myMsg",statusHolder);
                startActivity(intent);
            } else {
                Toast.makeText(getApplicationContext(), "No connection available",
                Toast.LENGTH_SHORT).show(); 
            }

        }
        catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Connection refused",
            Toast.LENGTH_SHORT).show(); 
        }
   }
};

Выше приведен onClickListener, statusHolder - это строка, которая передается моей активности в FacebookConnect. Это часть в FacebookConnect, где происходит ошибка:

    public void loginSuccess(Facebook facebook) {

    GraphApi graphApi= new GraphApi(facebook);
    if(intent.getStringExtra(".myMsg")!="null"){

    try {

        graphApi.setStatus(intent.getStringExtra(".myMsg"));
        fbManager.displayToast("Status posted!");
        Intent myIntent = new Intent(this, mainActivity.class);
        startActivityForResult(myIntent, 0);

    } catch (EasyFacebookError e) {
        e.toString();
    }
    } else {
        fbManager.displayToast("Fatal error occured: Your device refuses to pass the information to Facebook.");
    }



}

Оператор if-else, который я только что добавил, чтобы проверить, возможно ли, что намерение передается как нулевое, но я получаю отчеты о сбое по той же проблеме независимо от этого. Я уже давно тяну свои волосы по этому поводу. У кого-нибудь есть ключ? Одним устройством, на котором он не работал, был HTC Thunderbolt.

Ответы [ 2 ]

5 голосов
/ 19 июля 2011
    if(intent.getStringExtra(".myMsg")!="null"){

Вы сравниваете строку String extra со строкой "null", которая всегда завершится ошибкой, если только передаваемая вами строка String не является константной строкой "null".Чтобы усугубить эту проблему, вы используете прямое сравнение ссылок на объекты, а не .equals().

Не хотите вместо этого сравнивать его со значением null?

    if(intent.getStringExtra(".myMsg")!= null){

Обратите внимание, что, поскольку ваш код в настоящее время стоит, ваше сравнение не удастся, и вы перейдете к предложению try и в конечном итоге вызовете

    graphApi.setStatus(intent.getStringExtra(".myMsg"));

, где возвращаетсяExtra на самом деле null.

2 голосов
/ 20 июля 2011

Я полностью забыл об этом вопросе, но подумал, что, вероятно, мне следует это задокументировать. Во всяком случае, оказывается, что это была вина Facebook в то время. Проблема решилась сама собой после того, как мое приложение было на серверах Facebook через несколько дней.

Думаю, я должен упомянуть это:

На протяжении всего испытания, однако, я провел массу поисков, пытаясь выяснить это, и, как ни странно, это та же проблема, вызванная, если ключ API недействителен (тот, который вы генерируете с помощью keytool). Поэтому, если у кого-то возникла эта проблема, я бы посоветовал убедиться, что все его ключи верны. Если ключи верны, подождите несколько дней, прежде чем публиковать свое приложение на Android Market или в любом другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...