Android android.os.BinderProxy erreur
J'ai été à essayer d'obtenir ce android service de travail mais je n'arrive pas à comprendre pourquoi j'obtiens cette erreur.
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:
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;
}
}
}
}
Réalisation service de mise à jour:
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;
}
}
}
Une idée de ce que je fais de mal?
OriginalL'auteur Landister | 2012-05-13
Vous devez vous connecter pour publier un commentaire.
Le crash est parce que le classeur que vous obtenez en retour est une instance de BinderProxy, pas votre local classeur de la classe. Cela se produit généralement parce que votre activité est en tentant de se lier à un service qui n'est pas dans le même processus. Lors de la liaison dans les limites du processus, une instance de BinderProxy est utilisé à la place de l'instance elle-même (puisque c'est dans un autre processus).
Quel est votre AndroidManifest.xml ressembler?
Si c'est le cas, vous devez soit a) le replacer dans le même processus, ou b) écrire un AIDL liant à la place d'un local de liant.
Merci pour l'aide
Alors, comment résoudre ce problème par le biais de manifester ?!!
Juste supprimer android:process= attribut de la balise de service dans le manifeste.
OriginalL'auteur Bill Phillips