如何在Android类之间传递接收数据

时间:2016-10-03 13:55:24

标签: java android google-maps

  

我有2个不同的类,第一类Tracking.java和第二类ReportingService.java。如何将ReportingService.java上的位置地址传递给Tracking.java?

 private void doLogout(){
    Log.i(TAG, "loginOnClick: ");
    //ReportingService rs = new ReportingService();
    //rs.sendUpdateLocation(boolean isUpdate, Location);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(NetHelper.getDomainAddress(this))
            .addConverterFactory(ScalarsConverterFactory.create())
            .build();

    ToyotaService toyotaService = retrofit.create(ToyotaService.class);

    // caller
    Call<ResponseBody> caller = toyotaService.logout("0,0",
            AppConfig.getUserName(this),
            "null");
    // async task
    caller.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            try {
                Log.i(TAG, "onResponse: "+response.body().string());
            }catch (IOException e){}

        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.e(TAG, "onFailure: ", t);
        }
    });

    AppConfig.saveLoginStatus(this, AppConfig.LOGOUT);
    AppConfig.storeAccount(this, "", "");

    Intent intent = new Intent(this, Main2Activity.class);
    startActivity(intent);
    finish();
}
  

此地址代码

 Call<ResponseBody> caller = toyotaService.logout("0,0",
            AppConfig.getUserName(this),
            "null");
  

这是类ReportingService.java的代码位置,从googlemap获取经度,纬度和位置地址

 private void sendUpdateLocation(boolean isUpdate, Location location) {
    Log.i(TAG, "onLocationChanged "+location.getLongitude());

    Geocoder geocoder;
    List<Address> addresses;
    geocoder = new Geocoder(this, Locale.getDefault());
    String street = "Unknown";
    try {
        addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
        if (addresses != null) {
            String address = addresses.get(0).getAddressLine(0);
            String city = addresses.get(0).getLocality();
            String state = addresses.get(0).getAdminArea();
            String country = addresses.get(0).getCountryName();
            String postalCode = addresses.get(0).getPostalCode();
            String knowName = addresses.get(0).getFeatureName();
            street = address + " " + city + " " + state + " " + country + " " + postalCode + " " + knowName;
            Log.i(TAG, "street "+street);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (isUpdate)
        NetHelper.report(this, AppConfig.getUserName(this), location.getLatitude(),
                location.getLongitude(), street, new PostWebTask.HttpConnectionEvent() {
            @Override
            public void preEvent() {

            }

            @Override
            public void postEvent(String... result) {
                try {
                    int nextUpdate = NetHelper.getNextUpdateSchedule(result[0]); // in second
                    Log.i(TAG, "next is in " + nextUpdate + " seconds");
                    if (nextUpdate > 60) {
                        dismissNotification();
                        isRunning = false;
                    } else if (!isRunning){
                        showNotification();
                        isRunning = true;
                    }
                    handler.postDelayed(location_updater, nextUpdate * 1000 /*millisecond*/);
                }catch (JSONException e){
                    Log.i(TAG, "postEvent error update");
                    e.printStackTrace();
                    handler.postDelayed(location_updater, getResources().getInteger(R.integer.interval) * 1000 /*millisecond*/);
                }
            }
        });
    else
        NetHelper.logout(this, AppConfig.getUserName(this), location.getLatitude(),
                location.getLongitude(), street, new PostWebTask.HttpConnectionEvent() {
            @Override
            public void preEvent() {

            }

            @Override
            public void postEvent(String... result) {
                Log.i(TAG, "postEvent logout "+result);
            }
        });
}

由于

3 个答案:

答案 0 :(得分:0)

使用this库并按照其中提供的示例进行操作。 它可以将您想要的任何东西传递到您想要的任何地方。

答案 1 :(得分:0)

我认为使用界面可以解决您的问题。 伪代码

ReportingException.java

添加此

public interface myLocationListner{
onRecievedLocation(String location); 
} 

private myLocationListner mylocation;

//在下面的行中添加街道地址

mylocation.onRecievedLocation(street);

然后在Tracking.java中实现myLocationListner 你去吧:)。

答案 2 :(得分:0)

您可以使用意图:

意图将触发第二个接收器,并将数据传递给

如果是BroadcastReceiver:

Intent intent = new Intent();
intent.setAction("com.example.2ndReceiverFilter");
intent.putExtra("key" , ); //put the data you want to pass on
getApplicationContext().sendBroadcast(intent);

如果服务:

Intent intent = new Intent();`
intent.putExtra("key" , value ); //put the data you want to pass on
startService( ReportingService.this , Tracking.class);
在Tracking.java中

,检索您传递的数据: 在onReceive里面,把这段代码放在第一位

intent.getExtras().getString("key");//if int use getInt("key")