当前位置:首页 » 安卓系统 » androidservice传递参数

androidservice传递参数

发布时间: 2022-08-21 21:04:14

㈠ Android service传递问题

我只学过java,没学过C;在我的理解范围内,java并没有指针概念。你所说的
class B(Service service) {
mBservice = service;
}
传过去的是一个对象,当service没有被启动的时候,传过去的就是null。当service启动的时候,传过去的是service的一个对象的引用。
也许你真的不该用c的那一套,理解java。java属于面向对象语言,不存在指针。

㈡ android service 中怎样接受activity传递过来的参数

可以参考如下内容:

service类必须实现一个接收方法,接收中传递的是intent
@Override
public IBinder onBind(Intent intent) {
Bundle bundle = intent.getExtras();
String stringVal = bundle.getString("stringValue"); //用于接收字符串
int numVal = bundle.getInt("intValue"); //用于接收int类型数据
byte[] bytes = bundle.getByteArray("bytesValue"); //用于接收字节流,你可以把文件放入字节流
return null;
}

你可以用Bundle来接受你从Activity发过来的数据,然后使用Bundle提供各个方法来接受数据。
如果仅仅是字符串之类的,
使用getStringExtra方法直接接收即可。
@Override
public IBinder onBind(Intent intent) {
String str1 = intent.getStringExtra("str1");
String str2 = intent.getStringExtra("str2");
return null;
}

㈢ Android的Service如何获取Activity传入的值

你写putExtra方法时,是否就传入的null,因为在用getStringExtra方法时候,获取不到值,才会返回一个空值.打个log看下,是否将你想要的参数传进去了

㈣ android启动一个service,然后用service检测系统使用intent启动activity。每次启动传递不同的图片参数。

startActivity(MyIntent);这个只是显示activity,而activity实际已经存在,所以他只显示出来,不刷新。这个是你对activity的生命周期了解还不够的原因。

解决办法是在你的activity里onresume()里重写 refresh()函数就好。这样就实现了。onresume就再次创建.
private void refresh() {
/*finish();
Intent intent = new Intent(RefreshActivityTest.this, RefreshActivityTest.class);
startActivity(intent);*/

onCreate(null);
}

㈤ android调用webservice怎么传递对象

1.webservice方法要传递参数的对象中包含了日期类型,guid类型。如下所示:

[html] view plain
POST /MyWebService.asmx HTTP/1.1
Host: 192.168.11.62
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/AddMaintenanceInfo"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddMaintenanceInfo xmlns="http://tempuri.org/">
<model>
<Id>guid</Id>
<CarId>guid</CarId>
<Cost>string</Cost>
<Dates>dateTime</Dates>
</model>
</AddMaintenanceInfo>
</soap:Body>
</soap:Envelope>

2.新建一个类CarMaintenanceInfo用于传递参数对象,并使其实现KvmSerializable,如下

[java] view plain
public class CarMaintenanceInfo implements KvmSerializable {

/**
* 车辆ID
*/
public String CarId;

/**
* 车辆维修费用
*/
public String Cost;

public String Dates;

@Override
public Object getProperty(int arg0) {
switch (arg0) {
case 0:
return CarId;
case 1:
return Cost;
case 2:
return Dates;
default:
break;
}
return null;
}

@Override
public int getPropertyCount() {
return 3;
}

@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
switch (arg0) {
case 0:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "CarId";
break;
case 1:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Cost";
break;
case 2:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Dates";
break;
default:
break;
}
}

@Override
public void setProperty(int arg0, Object arg1) {
switch (arg0) {
case 0:
CarId = arg1.toString();
break;
case 1:
Cost = arg1.toString();
break;
case 2:
Dates = arg1.toString();
break;
default:
break;
}

}

}

注意:getPropertyCount的值一定要与该类对象的属性数相同,否则在传递到服务器时,服务器收不到部分对象的属性。

3.编写请求方法,如下:

[java] view plain
public boolean addMaintenanceInfo(Context context) throws IOException, XmlPullParserException {

String nameSpace = "http://tempuri.org/";
String methodName = "AddMaintenanceInfo";
String soapAction = "http://tempuri.org/AddMaintenanceInfo";

String url = "http://192.168.11.62:6900/MyWebService.asmx?wsdl";// 后面加不加那个?wsdl参数影响都不大

CarMaintenanceInfo info = new CarMaintenanceInfo();
info.setProperty(0, "9fee02c9-8785-4b49-b389-58ed6562c66d");
info.setProperty(1, "12778787");
info.setProperty(2, "2013-07-29T16:45:20");

// 建立webservice连接对象
org.ksoap2.transport.HttpTransportSE transport = new HttpTransportSE(url);
transport.debug = true;// 是否是调试模式

// 设置连接参数
SoapObject soapObject = new SoapObject(nameSpace, methodName);
PropertyInfo objekt = new PropertyInfo();
objekt.setName("model");
objekt.setValue(info);
objekt.setType(info.getClass());
soapObject.addProperty(objekt);

// 设置返回参数
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// soap协议版本必须用SoapEnvelope.VER11(Soap
// V1.1)
envelope.dotNet = true;// 注意:这个属性是对dotnetwebservice协议的支持,如果dotnet的webservice
// 不指定rpc方式则用true否则要用false
envelope.bodyOut = transport;
envelope.setOutputSoapObject(soapObject);// 设置请求参数
// new MarshalDate().register(envelope);
envelope.addMapping(nameSpace, "CarMaintenanceInfo", info.getClass());// 传对象时必须,参数namespace是webservice中指定的,

// claszz是自定义类的类型
try {
transport.call(soapAction, envelope);
// SoapObject sb = (SoapObject)envelope.bodyIn;//服务器返回的对象存在envelope的bodyIn中
Object obj = envelope.getResponse();// 直接将返回值强制转换为已知对象
Log.d("WebService", "返回结果:" + obj.toString());

}
catch (IOException e) {
e.printStackTrace();
}
catch (XmlPullParserException e) {
e.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}

return true;

// 解析返回的结果
// return Boolean.parseBoolean(new AnalyzeUtil().analyze(response));
}

注意:传递date类型的时候其实可以使用Date而不是String。但是需要修改几个地方
1.CarMaintenanceInfo类中的getPropertyInfo(),将arg2.type = PropertyInfo.STRING_CLASS修改为MarshalDate.DATE_CLASS;
2. 在请求方法中的 envelope.setOutputSoapObject(soapObject);下加上 new MarshalDate().register(envelope);
虽然可以使用Date,但是传到服务器上的时间与本地时间有时差问题。

当Android 调用webservice,请求参数中有日期,guid,double时,将这些类型在添加对象前转换为字符串即可。

[java] view plain
// 构造request
SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetCarListByRegion");
request.addProperty("leftTopLat", String.valueOf(leftTopLat));
request.addProperty("leftTopLng", String.valueOf(leftTopLng));
request.addProperty("rightBottomLat", String.valueOf(rightBottomLat));
request.addProperty("rightBottomLng", String.valueOf(rightBottomLng));

当需要传递一个服务器对象参数时.
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetLicenseDetails xmlns="http://tempuri.org/">
<companyId>guid</companyId>
<licenseNos>
<string>string</string>
<string>string</string>
</licenseNos>
<pageOptions>
<page>int</page>
<rows>int</rows>
<total>int</total>
<sort>string</sort>
<order>string</order>
<skip>int</skip>
<Remark>string</Remark>
</pageOptions>
</GetLicenseDetails>
</soap:Body>
</soap:Envelope>

[java] view plain
public ListPageResult<LicenseInfo> getLicenseDetails(String[] licenseNos, int page, int rows, int total) {
// 构造request
SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");
// 许可证列表
SoapObject deviceObject = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");
if (licenseNos != null && licenseNos.length > 0) {
for (int i = 0; i < licenseNos.length; i++) {
if (!"".equals(licenseNos[i])) {
deviceObject.addProperty("string", licenseNos[i]);
}
}
request.addProperty("licenseNos", deviceObject);
}
else {
request.addProperty("licenseNos", null);
}
// 分页数据
SoapObject optionObject = new SoapObject(PublishInfo.NAMESPACE, "PageOptions");
optionObject.addProperty("page", page);
optionObject.addProperty("rows", rows);
optionObject.addProperty("total", total);
optionObject.addProperty("sort", null);
optionObject.addProperty("order", "desc");
optionObject.addProperty("skip", 0);
optionObject.addProperty("Remark", null);
request.addProperty("pageOptions", optionObject);
// 获取response
Object response = sendRequest(context, request);
if (!mNetErrorHanlder.hasError(response)) { return ObjectAnalyze.getLicenseDetails(response); }
return null;
}

㈥ android 如何调用默认浏览器(webservice)打开网页使用post的方式传递参数。

用HttpURLConnection对象,我们可以向网络发送请求参数. String requestUrl = "http://localhost:8080/itcast/contanctmanage.do"; Map<String, String> requestParams = new HashMap<String, String>(); requestParams.put("age", "12"); requestParams.put("name", "中国"); StringBuilder params = new StringBuilder(); for(Map.Entry<String, String> entry : requestParams.entrySet()){ params.append(entry.getKey()); params.append("="); params.append(URLEncoder.encode(entry.getValue(), "UTF-8")); params.append("&"); } if (params.length() > 0) params.deleteCharAt(params.length() - 1); byte[] data = params.toString().getBytes(); URL realUrl = new URL(requestUrl); HttpURLC...

㈦ android 怎样用AIDL Service 传递复杂数据

第一步:部署我们的服务端,也就是Service端:

1:在Service端我先自定义2个类型:Person和Pet。因为我们需要跨进程传递Person对象和Pet对象,所以Person类和Pet类都必须实现Parcelable接口,并要求在实现类中定义一个名为CREATER,类型为Parcelable.creator的静态Field。
2:创建完自定义类型之后还需要用AIDL来定义它们,Person.aidl和Pet.aidl的代码如下:
1 package com.example.remoteservice;
2 parcelable Person;
1 package com.example.remoteservice;
2 parcelable Pet;

3:完成1,2之后就可以使用AIDL定义通信接口了,在这里我定义一个IPet.aidl的接口,代码如下:
1 package com.example.remoteservice; //必须导入包
2 import com.example.remoteservice.Person; //指定自定义类的位置
3 import com.example.remoteservice.Pet;
4
5 interface IPet
6 {
7 List getPets(in Person owner);//这里的in表示Person对象是输入的参数
8 }

4:服务端的最后一步就是实现Service了,当然不要忘了注册Service,代码如下:
1 package com.example.remoteservice;
2
3 import com.example.remoteservice.IPet.Stub;
4
5 import java.util.ArrayList;
6 import java.util.HashMap;
7 import java.util.List;
8 import java.util.Map;
9
10 import android.app.Service;
11 import android.content.Intent;
12 import android.os.IBinder;
13 import android.os.RemoteException;
14 import android.util.Log;
15
16 public class RemoteService extends Service {
17
18 private PetBinder petBinder;
19
20 private static Map> pets = new HashMap>();
21 static {
22 ArrayList list1 = new ArrayList();
23 list1.add(new Pet(candy, 2.2f));
24 list1.add(new Pet(sandy, 4.2f));
25 pets.put(new Person(1, sun, sun), list1);
26
27 ArrayList list2 = new ArrayList();
28 list2.add(new Pet(moon, 5.2f));
29 list2.add(new Pet(hony, 6.2f));
30 pets.put(new Person(1, csx, csx), list2);
31
32 }
33
34 public class PetBinder extends Stub {// 继承IPet接口中的Stub类,Stub类继承了Binder类,所有PetBinder也间接的继承了Binder类
35
36 @Override
37 public List getPets(Person owner) throws RemoteException {
38
39 return pets.get(owner);
40 }
41
42 }
43
44 @Override
45 public IBinder onBind(Intent intent) {
46
47 Log.i(csx, onBind);
48 return petBinder;
49 }
50
51 @Override
52 public void onCreate() {
53
54 super.onCreate();
55 Log.i(csx, onCreate);
56 petBinder = new PetBinder();// 实例化Binder
57
58 }
59
60 @Override
61 public boolean onUnbind(Intent intent) {
62
63 Log.i(csx, onUnbind);
64 return super.onUnbind(intent);
65 }
66
67 @Override
68 public void onDestroy() {
69
70 super.onDestroy();
71 Log.i(csx, onDestroy);
72 }
73
74 }

第二步:部署客户端:

1.在客户端新建一个包,命名需要和服务端放置aidl文件的包名相同(我这里是com.example.remoteservice),然后把服务端的Person.java,Pet.java,Person.aidl,Pet.aidl,IPet.aidl复制到这个包下面

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150108/20150108092529213.png2.在activity中绑定远程服务进行数据交换,layout布局和activity代码如下:

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150108/20150108092531218.png

复制代码
1 package com.example.remoteclient;
2
3 import android.app.Service;
4 import android.content.ComponentName;
5 import android.content.Intent;
6 import android.content.ServiceConnection;
7 import android.os.Bundle;
8 import android.os.IBinder;
9 import android.os.RemoteException;
10 import android.support.v7.app.ActionBarActivity;
11 import android.util.Log;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.widget.ArrayAdapter;
15 import android.widget.Button;
16 import android.widget.EditText;
17 import android.widget.ListView;
18
19 import com.example.remoteservice.IPet;
20 import com.example.remoteservice.Person;
21 import com.example.remoteservice.Pet;
22
23 import java.util.List;
24
25 public class RemoteClient extends ActionBarActivity {
26
27 public static final String REMOTE_SERVICE_ACTION = com.example.remoteservice.RemoteService.ACTION;
28 EditText editText;
29 Button button;
30 ListView listView;
31
32 IPet petService;// 声明IPet接口
33 List pets;
34 ServiceConnection conn = new ServiceConnection() {
35
36 @Override
37 public void onServiceDisconnected(ComponentName name) {
38 Log.i(csx, onServiceDisconnected);
39 conn = null;
40 }
41
42 @Override
43 public void onServiceConnected(ComponentName name, IBinder service) {
44 Log.i(csx, onServiceConnected);
45 petService = IPet.Stub.asInterface(service);// 通过远程服务的Binder实现接口
46
47 }
48 };
49
50 @Override
51 protected void onCreate(Bundle savedInstanceState) {
52 super.onCreate(savedInstanceState);
53 setContentView(R.layout.remote_client_layout);
54 editText = (EditText) findViewById(R.id.editText_person);
55 button = (Button) findViewById(R.id.button_ok);
56 listView = (ListView) findViewById(R.id.listView_pet);
57
58 Intent service = new Intent();
59 service.setAction(REMOTE_SERVICE_ACTION);
60
61 bindService(service, conn, Service.BIND_AUTO_CREATE);// 绑定远程服务
62
63 button.setOnClickListener(new OnClickListener() {
64
65 @Override
66 public void onClick(View v) {
67 String personName = editText.getText().toString();
68 if (personName == null || personName.equals()) {
69
70 return;
71 }
72
73 try {
74 pets = petService.getPets(new Person(1, personName, personName));// 调用远程service的getPets方法
75 updataListView();
76
77 } catch (RemoteException e) {
78
79 e.printStackTrace();
80 } catch (NullPointerException e) {
81 e.printStackTrace();
82 }
83
84 }
85 });
86
87 }
88
89 public void updataListView() {
90 listView.setAdapter(null);
91
92 if (pets == null || pets.isEmpty()) {
93 return;
94
95 }
96 ArrayAdapter adapter = new ArrayAdapter(RemoteClient.this,
97 android.R.layout.simple_list_item_1, pets);
98 listView.setAdapter(adapter);
99
100 }
101
102 @Override
103 protected void onDestroy() {
104
105 unbindService(conn);// 解除绑定
106 super.onDestroy();
107 }
108
109 }
到此为止所有的工作都完成了,下面我们看一下效果:我在编辑框中输入“csx”,点击确定,就会显示出服务端RemoteService中pets的相应数据。

㈧ android怎么给本地service传送数据

在application里面添加handler的set,get方法,在activity里面用handler发送,在service里面实现Handler.Callback接口,在handlemessage里面接收

热点内容
网络硬盘录像机存储 发布:2025-01-15 18:48:20 浏览:892
大学生java课程培训 发布:2025-01-15 18:45:53 浏览:486
asp网络验证源码 发布:2025-01-15 18:39:10 浏览:889
我的世界100人服务器电脑配置 发布:2025-01-15 18:38:02 浏览:227
抽盒机算法 发布:2025-01-15 18:31:07 浏览:253
万网云服务器云虚拟主机 发布:2025-01-15 18:20:58 浏览:949
手动安装交叉编译链 发布:2025-01-15 18:15:30 浏览:565
java调用clinux 发布:2025-01-15 18:13:02 浏览:294
如何给孩子配置一份保险 发布:2025-01-15 18:07:53 浏览:457
思科模拟器ftp配置 发布:2025-01-15 18:01:53 浏览:198