【问题标题】:How to get data from handler如何从处理程序中获取数据
【发布时间】:2016-11-21 08:04:04
【问题描述】:

在我的 android 项目中,我有一个实现 IUSBDeviceObserver 接口的 java 类。

public class LensPickerActivity extends CarActivity 
    implements LensPickerSelectionHandler,IUSBDeviceObserver{

    private Context mContext;
    private PackageManager mPackageManager;
    private PagedListView mPagedListView;
    MediaReceiver mediaReceiver;    
    private String mDeviceName = "";
    private static final int UPDATE_USB_NAME = 1

    public LensPickerActivity(Proxy proxy, Context context, Car car) {
        super(proxy, context, car);     

        mContext = context;
        mPackageManager = mContext.getPackageManager();
        mSharedPrefs = LensPickerUtils.getFacetSharedPrefs(mContext);


    }

    // override function from IUSBDeviceObserver
    @Override
    public void onUSBDeviceChanged(String device) {

        mDeviceName = device;        
        Log.d(TAG,"device name ++++"+" "+mDeviceName);
        getAttachedDeviceName(mDeviceName);

    }
}

在 onUSBDeviceChanged() 函数中,我得到了字符串值,但是如何将该字符串传递给 LensPickerActivity 上下文?我的意思是主线程。我正在使用 Handler 机制,但它不适合我。下面是汉德类

private void getAttachedDeviceName(String deviceName) {
        Message message = mHandlerPhone.obtainMessage(UPDATE_USB_NAME);
        if (deviceName == null) return;
        message.obj = deviceName;
        Log.d(TAG, "aTTCHEDdEVICE Name :: " + deviceName);
        mHandlerPhone.sendMessage(message);
    }

    Handler mHandlerPhone = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case UPDATE_USB_NAME:
                    String aResponse = msg.getData().getString("message");
                    Log.d(TAG, "aTTCHEDdEVICE Name handler :: " + aResponse);
                   break;
                default:

            }
        }
    };  

在 mHandlerPhone 中,我得到 String 为空。如何在主线程中获取字符串值。

谢谢

【问题讨论】:

  • 这不应该编译。您的 Handler 代码似乎在方法体之外。

标签: java android parameter-passing handler message


【解决方案1】:

msg.obj 包含你的String,所以尝试使用:

Handler mHandlerPhone = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case UPDATE_USB_NAME:
                    String aResponse = (String) msg.obj;
                    Log.d(TAG, "aTTCHEDdEVICE Name handler :: " + aResponse);
                   break;
                default:

            }
        }

【讨论】:

  • 感谢您的回答。再来一个Qn。如何从 Handler 获取数据并更新到 OnCreate 方法
猜你喜欢
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多