Android 服务 android.os.BinderProxy 错误
问题说明
我一直试图让这个 android 服务工作,但我不明白为什么我会收到这个错误.
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;
}
}
}
}
成就更新服务:
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;
}
}
}
知道我做错了什么吗?
正确答案
崩溃是因为您返回的 binder 是 BinderProxy 的一个实例,而不是您本地的 binder 类.这通常是因为您的活动试图绑定到不在同一进程中的服务.当跨进程边界绑定时,使用 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).
你的 AndroidManifest.xml 是什么样的?
What does your AndroidManifest.xml look like?
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /reply/detail/tanhcfigha
-
YouTube API 不能在 iOS (iPhone/iPad) 工作,但在桌面浏览器工作正常?
it1352 07-30 -
iPhone,一张图像叠加到另一张图像上以创建要保存的新图像?(水印)
it1352 07-17 -
保持在后台运行的 iPhone 应用程序完全可操作
it1352 07-25 -
使用 iPhone 进行移动设备管理
it1352 07-23 -
在android同时打开手电筒和前置摄像头
it1352 09-28 -
扫描 NFC 标签时是否可以启动应用程序?
it1352 08-02 -
检查邮件是否发送成功
it1352 07-25 -
Android微调工具-删除当前选择
it1352 06-20 -
希伯来语的空格句子标记化错误
it1352 06-22 -
Android App 和三星 Galaxy S4 不兼容
it1352 07-20