将包实例传递给放置选择器意图

时间:2018-04-17 19:40:41

标签: java android bundle google-places-api

我正在开发一款Android应用,其主要目的是通过管理员更新员工的工作地点。现在,当我想从我的回收站视图(与我的UserManagerAdapter连接的员工列表)更改/更新员工的位置时,我必须将该员工的用户名传递给场所选择器意图,以便当管理员选择所需的时候位置,该用户的数据库将相应更改。

我的步骤(2个步骤)

  1. 我已将用户名传递给地方选择器意图为bundle。
  2. 我的UserManagerAdapter

         holder.locationTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                launchPicker(data.get(position).getUserName());
            }
        });
    
        private void launchPicker(String userName) {
        PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
        Bundle bundle = new Bundle();
    
        bundle.putString(USERNAME,userName);
        try {
            fragment.startActivityForResult(builder.build(fragment.getActivity()),PLACE_PICKER_REQUEST,bundle);
        } catch (GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }
    
    }
    
    1. 我收到了片段内的位置请求并更新了该特定用户的位置
    2. 我的ManageUserFragment

      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          if(requestCode == PLACE_PICKER_REQUEST){
              if(resultCode == RESULT_OK){
                  Place place = PlacePicker.getPlace(getContext(),data);
                  address = place.getAddress().toString();
                  String latLng = place.getLatLng().toString();
                  latLang = latLng;
      
                  //update user's decided location
                  Bundle bundle = data.getExtras();
                  String userName = bundle.getString(USERNAME);// it returns null, Why?
                  updateLocation(latLang,userName);
                  Toast.makeText(getContext(), latLng, Toast.LENGTH_SHORT).show();
              }else{
                  Toast.makeText(getContext(), getContext().getText(R.string.locationError), Toast.LENGTH_SHORT).show();
              }
          }
      }
      

      我的常数是

      public static final String USERNAME="Username";
      

      现在,

      我的问题是

        

      为什么bundle.getString(USERNAME)总是返回null?

           

      如何传递数据以放置选择器意图,以便我们可以接收它   onActivityResult?

1 个答案:

答案 0 :(得分:0)

在复制你的案例并进行一点研究之后,我发现startActivityForResult()中的第三个参数不用于将一组值传递给onActivityResult,它已被使用要将选项传递给Android本身,您可以找到here。因此,如果您想要传递任何数据,您必须使用putExtra("USERNAME", username)的意图,并且可以使用getStringExtra("USERNAME")检索它。它也在this回答中进行了解释。