Bump API Android崩溃

Android上的bump API存在很大问题。 我在示例中设置了所有内容,第一次开始我的活动包含它工作得很好的凹凸代码,现在如果我回去再次启动它会因为致命信号错误而崩溃…它发生在我打电话后bump API的配置。

我可以不再打电话了吗? 但是没有什么可以检查它是否已经配置。

public class BumpActivity extends Activity { private IBumpAPI api; private ProgressDialog mDialog; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bump); mDialog = ProgressDialog.show(BumpActivity.this, "Preparing bump", "Loading"); bindService(new Intent(IBumpAPI.class.getName()), connection, Context.BIND_AUTO_CREATE); IntentFilter filter = new IntentFilter(); filter.addAction(BumpAPIIntents.CHANNEL_CONFIRMED); filter.addAction(BumpAPIIntents.DATA_RECEIVED); filter.addAction(BumpAPIIntents.NOT_MATCHED); filter.addAction(BumpAPIIntents.MATCHED); filter.addAction(BumpAPIIntents.CONNECTED); registerReceiver(receiver, filter); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override public void onBackPressed(){ Intent resultIntent = new Intent(); setResult(Activity.RESULT_CANCELED, resultIntent); super.onBackPressed(); } private final ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder binder) { Log.i("BumpTest", "onServiceConnected"); api = IBumpAPI.Stub.asInterface(binder); new Thread() { public void run() { try { api.configure("9b17d663752843a1bfa4cc72d309339e", "Bump User"); } catch (RemoteException e) { Log.w("BumpTest", e); } } }.start(); Log.d("Bump Test", "Service connected"); } @Override public void onServiceDisconnected(ComponentName className) { Log.d("Bump Test", "Service disconnected"); } }; private final BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); try { if (action.equals(BumpAPIIntents.DATA_RECEIVED)) { getUserDetailFromBump(new String( intent.getByteArrayExtra("data"))); } else if (action.equals(BumpAPIIntents.MATCHED)) { long channelID = intent .getLongExtra("proposedChannelID", 0); Log.i("Bump Test", "Matched with: " + api.userIDForChannelID(channelID)); api.confirm(channelID, true); Toast toast = Toast.makeText( getApplicationContext(), "Matched with: " + api.userIDForChannelID(channelID), Toast.LENGTH_SHORT); toast.show(); } else if (action.equals(BumpAPIIntents.CHANNEL_CONFIRMED)) { long channelID = intent.getLongExtra("channelID", 0); api.send(channelID, CurrentUserManager.getSharedManager() .getCurrentUser().getUserId().toString().getBytes()); } else if (action.equals(BumpAPIIntents.NOT_MATCHED)) { Toast toast = Toast.makeText(getApplicationContext(), "No match", Toast.LENGTH_SHORT); toast.show(); } else if (action.equals(BumpAPIIntents.CONNECTED)) { mDialog.dismiss(); api.enableBumping(); } } catch (RemoteException e) { } } }; public void getUserDetailFromBump(String data) { Log.i("User Id", data); LoginRequest login = new LoginRequest(getApplicationContext()); Log.i("Token", login.getArchivedToken()); AsyncHttpClient restRequest = new AsyncHttpClient(); PersistentCookieStore cookie = new PersistentCookieStore(getApplicationContext()); restRequest.setCookieStore(cookie); RequestParams params = new RequestParams(); params.put("auth_token", login.getArchivedToken()); params.put("user_id", data); Log.i("Request", "Preparing"); restRequest.get(Constantes.API_URL + "users/show.json", params, new AsyncHttpResponseHandler(){ public void onSuccess(String response) { Log.i("Reponse", response); try { User user = new User(new JSONObject(response)); Log.i("User", user.toString()); //Driver if (CurrentUserManager.getSharedManager().getCurrentUser().getType() == 1){ CurrentRouteManager.getSharedManager().getCurrentRoute().addPassanger(user); Intent resultIntent = new Intent(BumpActivity.this, DriverActivity.class); resultIntent.putExtra("PASSENGER_ADDED", true); setResult(1, resultIntent); finish(); } else{ Intent p = new Intent(BumpActivity.this, RoutePassenger.class); p.putExtra("driver", user); startActivity(p); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onFailure(Throwable e) { Log.i("Error", e.toString()); } }); } public void onStart() { Log.i("BumpTest", "onStart"); super.onStart(); } public void onRestart() { Log.i("BumpTest", "onRestart"); super.onRestart(); } public void onResume() { Log.i("BumpTest", "onResume"); super.onResume(); } public void onPause() { Log.i("BumpTest", "onPause"); try { api.disableBumping(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } super.onPause(); } public void onStop() { Log.i("BumpTest", "onStop"); try { api.disableBumping(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } super.onStop(); } public void onDestroy() { Log.i("BumpTest", "onDestroy"); try { api.disableBumping(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } unbindService(connection); unregisterReceiver(receiver); super.onDestroy(); } } 

我几天前终于解决了。 由于我不是JAVA专家,我认为该bug位于Bump库中。 如果你在api.configure配置它已经配置它只是崩溃。 所以我最终制作了一个单身,确保它只被调用一次

这是代码

 public class BumpConnection { protected Context context; private IBumpAPI api; private static BumpConnection sharedManager; public static synchronized BumpConnection getSharedManager(Context context) { if (sharedManager == null) { sharedManager = new BumpConnection(context); } return sharedManager; } private BumpConnection(Context context){ this.context = context; context.bindService(new Intent(IBumpAPI.class.getName()), connection, Context.BIND_AUTO_CREATE); } public IBumpAPI getApi() { return api; } public void setApi(IBumpAPI api) { this.api = api; } private final ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder binder) { Log.i("BumpTest", "onServiceConnected"); api = IBumpAPI.Stub.asInterface(binder); new Thread() { public void run() { try { api.configure("9b17d663752843a1bfa4cc72d309339e", "Bump User"); } catch (RemoteException e) { Log.w("BumpTest", e); } } }.start(); Log.d("Bump Test", "Service connected"); } @Override public void onServiceDisconnected(ComponentName className) { Log.d("Bump Test", "Service disconnected"); } }; } 

使用git hub上提供的最新bump api,仔细阅读README.md文件。 有明确提到通过使用.aidl文件(在src文件夹中可用),首先使用命令编译它

android更新项目-t android-15 -l path_to / bump-api-library -p path_to_your_project /

在您的终端中..如果您是Linux用户,则将路径设置为platform-tools,然后将此命令与./adb一起使用。

然后刷新项目,将此Library项目设置为测试凹凸项目中的库。还要替换通过电子邮件收到的bumpapi密钥