Android 将对象数据从服务放到活动
我试图使用Intent服务解析来自mysql的数据,并将其放到主活动中 MyTestService.javaAndroid 将对象数据从服务放到活动,android,broadcastreceiver,android-intentservice,Android,Broadcastreceiver,Android Intentservice,我试图使用Intent服务解析来自mysql的数据,并将其放到主活动中 MyTestService.java public class MyTestService extends IntentService { public MyTestService() { super("MyTestService"); // TODO Auto-generated constructor stub } @Override protected void onHandleIntent(Int
public class MyTestService extends IntentService {
public MyTestService() {
super("MyTestService");
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent intent) {
Parameter result = downloadData();
Log.d("msg", result.toString());
Intent in = new Intent();
in.setAction(Receiver.ACTION_RESP);
in.addCategory(Intent.CATEGORY_DEFAULT);
in.putExtra("123", (Parcelable) result);
sendBroadcast(in);
}
private Parameter downloadData() {
Parameter parameter = new Parameter();
String data = (new LandSlideHttpClient()).getDeviceData();
try {
parameter = JSONLandslideParser.getParameter(data);
} catch (Exception e) {
}
return parameter;
}
}
MainActivity.java
public class MainActivity extends ActionBarActivity {
private Receiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter(Receiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new Receiver();
registerReceiver(receiver, filter);
Intent intent = new Intent(this, MyTestService.class);
startService(intent);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
unregisterReceiver(receiver);
}
public class Receiver extends BroadcastReceiver {
public static final String ACTION_RESP = "abcdef";
@Override
public void onReceive(Context context, Intent intent) {
Parameter result = (Parameter) intent.getParcelableExtra("123");
TextView textView = (TextView) findViewById(R.id.textview);
textView.setText(result.id.getID());
}
}
}
当我运行代码时,Logcat是
04-22 04:14:32.512: E/AndroidRuntime(4472): java.lang.RuntimeException: Error receiving broadcast Intent { act=abcdef cat=[android.intent.category.DEFAULT] flg=0x10 (has extras) } in com.example.testservice.MainActivity$Receiver@416fd1c0
>04-22 04:14:32.512: E/AndroidRuntime(4472): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:773
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Handler.handleCallback(Handler.java:730)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Handler.dispatchMessage(Handler.java:92)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Looper.loop(Looper.java:137)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.app.ActivityThread.main(ActivityThread.java:5103)
04-22 04:14:32.512: E/AndroidRuntime(4472): at java.lang.reflect.Method.invokeNative(Native Method)
04-22 04:14:32.512: E/AndroidRuntime(4472): at java.lang.reflect.Method.invoke(Method.java:525)
04-22 04:14:32.512: E/AndroidRuntime(4472): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
04-22 04:14:32.512: E/AndroidRuntime(4472): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-22 04:14:32.512: E/AndroidRuntime(4472): at dalvik.system.NativeStart.main(Native Method)
04-22 04:14:32.512: E/AndroidRuntime(4472): Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.example.testservice.Parameter
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Parcel.readParcelableCreator(Parcel.java:2114)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Parcel.readParcelable(Parcel.java:2055)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Parcel.readValue(Parcel.java:1971)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Parcel.readMapInternal(Parcel.java:2255)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Bundle.unparcel(Bundle.java:223)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.os.Bundle.getParcelable(Bundle.java:1170)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.content.Intent.getParcelableExtra(Intent.java:4501)
04-22 04:14:32.512: E/AndroidRuntime(4472): at com.example.testservice.MainActivity$Receiver.onReceive(MainActivity.java:59)
04-22 04:14:32.512: E/AndroidRuntime(4472): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:763)
04-22 04:14:32.512: E/AndroidRuntime(4472): ... 9 more
Parameter.java
public class Parameter implements Parcelable{
public class currentData {
private float temp;
private float acc;
private float moisture;
private float battery;
private String date;
private String time;
public float getTemp() {
return temp;
}
public void setTemp(float temp) {
this.temp = temp;
}
public float getAcc() {
return acc;
}
public void setAcc(float acc) {
this.acc = acc;
}
public float getMoisture() {
return moisture;
}
public void setMoisture(float moisture) {
this.moisture = moisture;
}
public float getBattery() {
return battery;
}
public void setBattery(float battery) {
this.battery = battery;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
public class ID {
private String ID;
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
}
public ID id = new ID();
public currentData currentData = new currentData();
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
}
}
使用CREATOR修改了参数类。查看此项了解更多详细信息。请记住,在写入包裹和读取包裹时,写入和读取参数的顺序应相同,否则将无法工作
public class Parameter implements Parcelable{
public class currentData {
private float temp;
private float acc;
private float moisture;
private float battery;
private String date;
private String time;
public float getTemp() {
return temp;
}
public void setTemp(float temp) {
this.temp = temp;
}
public float getAcc() {
return acc;
}
public void setAcc(float acc) {
this.acc = acc;
}
public float getMoisture() {
return moisture;
}
public void setMoisture(float moisture) {
this.moisture = moisture;
}
public float getBattery() {
return battery;
}
public void setBattery(float battery) {
this.battery = battery;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
public class ID {
private String ID;
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
}
public ID id = new ID();
public currentData currentData = new currentData();
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// Implement your code to write data to parcel
}
//This is required for creating parcealable
public static final Parcelable.Creator<Parameter> CREATOR = new Creator<Parameter>() {
@Override
public Parameter[] newArray(int size) {
return new Parameter[size];
}
@Override
public Parameter createFromParcel(Parcel source) {
return new Parameter(source);
}
};
public Parameter (Parcel source){
// Implement your code to read data from parcel
}
}
public类参数实现可包裹{
公共类数据{
私人浮动温度;
私人浮动acc;
私人浮子水分;
私人浮充电池;
私有字符串日期;
私有字符串时间;
公共浮点getTemp(){
返回温度;
}
公共无效设置(浮动温度){
this.temp=temp;
}
公共浮点数getAcc(){
返回acc;
}
公共无效setAcc(浮动acc){
this.acc=acc;
}
公众浮标{
回潮;
}
公共湿度(浮子湿度){
这个.湿度=湿度;
}
公共浮子电池(){
回流电池;
}
公共电池(浮充电池){
这个。电池=电池;
}
公共字符串getTime(){
返回时间;
}
公共无效设置时间(字符串时间){
这个时间=时间;
}
公共字符串getDate(){
返回日期;
}
公共无效设置日期(字符串日期){
this.date=日期;
}
}
公共类ID{
私有字符串ID;
公共字符串getID(){
返回ID;
}
公共无效集合iD(字符串iD){
ID=ID;
}
}
公共ID=新ID();
public currentData currentData=新currentData();
@凌驾
公共int描述内容(){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
//实现将数据写入地块的代码
}
//这是创建可打包文件所必需的
公共静态最终包裹。创建者=新创建者(){
@凌驾
公共参数[]newArray(整数大小){
返回新参数[大小];
}
@凌驾
公共参数createFromParcel(地块源){
返回新参数(源);
}
};
公共参数(地块源){
//实现从地块读取数据的代码
}
}
请显示完整崩溃日志添加完整日志,请告诉我问题出在哪里04:14:32.512:E/AndroidRuntime(4472):原因:android.os.BadParcelableException:Parcelable协议需要一个名为Creator的Parcelable.Creator对象,该对象位于class com.example.testservice.Parameter
请显示参数的类
您的参数
类似乎没有正确实现Parcelable
共享您的参数对象类感谢您的帮助@Rajen,您知道通过意图将对象参数放入活动的其他方法吗?请检查此项。您可以在活动中创建ResultReceiver并传递给intentservice。