Android的服务android.os.BinderProxy错误 [英] Android service android.os.BinderProxy error

查看:3695
本文介绍了Android的服务android.os.BinderProxy错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直试图让这个机器人的服务工作,但我不明白,为什么我收到此错误。

I have been trying to get this android service working but I can not figure out why I am getting this error.

05-13 12:13:36.203: ERROR/dalvikvm(7782): could not disable core file generation for   pid 7782: Operation not permitted
05-13 12:13:36.469: ERROR/AndroidRuntime(7782): FATAL EXCEPTION: main
05-13 12:13:36.469: ERROR/AndroidRuntime(7782): java.lang.ClassCastException: android.os.BinderProxy
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at whiskeymedia.com.GiantBombAppActivity$1.onServiceConnected(GiantBombAppActivity.java:69)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1064)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1081)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at android.os.Handler.handleCallback(Handler.java:587)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at android.os.Looper.loop(Looper.java:130)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at android.app.ActivityThread.main(ActivityThread.java:3806)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at java.lang.reflect.Method.invokeNative(Native Method)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at java.lang.reflect.Method.invoke(Method.java:507)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-13 12:13:36.469: ERROR/AndroidRuntime(7782):     at dalvik.system.NativeStart.main(Native Method)
05-13 12:13:45.234: ERROR/GlobalUnplugService(7116): plugged = true,mBatteryPlugged=true

GiantBombAppActivity:

GiantBombAppActivity:

package whiskeymedia.com;

import java.util.ArrayList;
import java.util.List;

import whiskeymedia.com.vo.Achievement;
import android.app.ListActivity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.Color;
import android.os.Bundle;
import android.os.IBinder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class GiantBombAppActivity extends ListActivity {
  private ListView mListView;

  private AchievementDatabase achievementDatabase;

  private AchievementUpdateService s;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mListView = getListView();
    List<Achievement> achievements = new ArrayList<Achievement>();
    achievementDatabase = new AchievementDatabase(this);
    achievementDatabase.open();
    //achievementDatabase.resetDatabase();
    achievements = achievementDatabase.getAllAchievements();

    MyAdapter adapter = new MyAdapter(this, achievements);
    setListAdapter(adapter);

    List<String> achievementNames = new ArrayList<String>();
    for(Achievement achievement: achievements) {
      achievementNames.add(achievement.getAchievementName());

      mListView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
          //When clicked show a toast with the textview text
          Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
        }
      });

      doBindService();
    }
  }

  private ServiceConnection mConnection = new ServiceConnection() {

    public void onServiceConnected(ComponentName className, IBinder binder) {
      s = ((AchievementUpdateService.MyBinder) binder).getService();
      Toast.makeText(GiantBombAppActivity.this, "Connected", Toast.LENGTH_SHORT).show();
    }

    public void onServiceDisconnected(ComponentName className) {
      s = null;
    }
  };

  void doBindService() {
    bindService(new Intent(this, AchievementUpdateService.class), mConnection, Context.BIND_AUTO_CREATE);
  }

  /**
  * Adapter class to use for the list
  */
  private static class MyAdapter extends ArrayAdapter<Achievement> {

    /**
    * Constructor
    * 
    * @param context The context
    * @param contacts The list of contacts
    */
    public MyAdapter(final Context context, final List<Achievement> achievements) {
      super(context, 0, achievements);
    }

    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {
      View view = convertView;
      if (view == null) {
        view = LayoutInflater.from(getContext()).inflate(R.layout.list_item, null);
      }

      final TextView achiev = (TextView)view.findViewById(R.id.achievement);
      if (getItem(position).getAchievmentRarity().compareTo("common") == 0) {
        achiev.setTextColor(Color.GREEN);
      }
      else if (getItem(position).getAchievmentRarity().compareTo("uncommon") == 0) {
        achiev.setTextColor(Color.BLUE);
      }
      else if (getItem(position).getAchievmentRarity().compareTo("rare") == 0) {
        achiev.setTextColor(Color.MAGENTA);
      }

      achiev.setText(getItem(position).getAchievementName());

      final TextView game = (TextView)view.findViewById(R.id.game);
      game.setText(getItem(position).getGameName());
        return view;
      }
    }
  }
}

业绩更新服务:

Achievement update service:

package whiskeymedia.com;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import whiskeymedia.com.vo.Achievement;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

public class AchievementUpdateService extends Service{

  private AchievementDatabase achievementDatabase;

  private final IBinder mBinder = new MyBinder();

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    HtmlParser htmlParser = new HtmlParser();
    try {
      List<Achievement> achievements= htmlParser.parseDocument();
      achievementDatabase.loadAchievements(achievements);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return Service.START_NOT_STICKY;
  }

  @Override
  public IBinder onBind(Intent arg0) {
    return mBinder;
  }

  public class MyBinder extends Binder {
    AchievementUpdateService getService() {
    return AchievementUpdateService.this;
    }
  }

}

知不知道我做错了吗?

Any idea what I am doing wrong?

推荐答案

的崩溃是因为你找回粘合剂是BinderProxy的一个实例,而不是当地的粘合剂类。这通常是因为你的活性试图绑定到不是在同一进程中的服务。当跨进程边界结合,BinderProxy的一个实例是用来代替实际的实例(由于这是在一个不同的处理)。

The crash is because the binder you're getting back is an instance of BinderProxy, not your local binder class. This usually happens because your activity is attempting to bind to a service that is not in the same process. When binding across process boundaries, an instance of BinderProxy is used instead of the actual instance (since that's in a different process).

什么是您的Andr​​oidManifest.xml是什么样子?

What does your AndroidManifest.xml look like?

这篇关于Android的服务android.os.BinderProxy错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆