应老师的要求,要做个安卓app,实现备份app上的数据到服务器上的mongodb上,网上搜了下相关的实现方式。利用webservice技术,具体来说就是客户端直接调用服务器端的接口。之前从来没接触这玩意儿,网上搜了个初学者入门的demo:Java WebService 简单实例。用myecipse写了服务器端的webservice:

 package com.hyan.service;
import javax.jws.WebService;
import javax.xml.ws.Endpoint; import org.bson.BsonDocument;
import org.bson.Document; import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.util.JSON; @WebService
public class ServiceHello { /**
* 供客户端调用的方法
* @param name 传入参数
* @param name 返回结果
*/
public String getValue(String table,String items){
/*连接到mongodb进行curd操作*/
try{
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
DB db = MongoDB shell("tagmanager");
DBCollection collection = db.getCollection(table);
DBObject dbObject = (DBObject)JSON.parse(items);
collection.insert(dbObject);
System.out.println("插入成功!!!");
}catch(Exception e){
e.printStackTrace();
return "fail";
}
return "success";
}
public static void main(String[] args) {
Endpoint.publish("http://localhost:9001/Service/ServiceHello?wsdl",new ServiceHello());
System.out.println("service success!");
} }

这里有个小插曲,我本来打算是将安卓应用上的数据取出来,拼成json字符串再传到webservice中的方法中,再插入到mongodb中,结果按照www.runoob.com的mongodb教程发现只能插入Document类型,只能一个key-value一个key-value这样的去添,这样太烦了吧?难道就不能直接插入个json字符串么?我用MongoDB shell插入数据都直接是一条json字符串插入的啊,后来又搜了下,能通过上面的代码实现这个功能,只不过getDB()这个方法过时了,mongodb官方不推荐用这个方法.....,过时就过时吧,我也找不到其它的方法了。如果哪位有其它方法的话请务必告知,小弟谢谢了!!!

下面就是安卓应用端该怎么写了,这里参考了http://www.cnblogs.com/superpang/p/4911422.html篇和http://blog.csdn.net/mfc2003/article/details/17119135这篇博客

写好安卓端后和myecipse的客户端后,测试发现用电脑Myeclipse客户端可以访问webservice但是安卓端却无法通过内网ip地址访问我电脑上的webservice百度了下还是没有解决问题,改变策略,去nat123申请了个二级域名用外网到内网这种形式来让我手机访问到我电脑上的webservice,搞定!

eclise安卓端的代码:

 package com.example.tagmanager.util;

 import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE; import com.example.tagmanager.db.SqliteDBHelper; import android.app.ProgressDialog;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast; /*Android多线程编程,异步消息处理机制,使用AsycTask*/
public class BackUpByAsync extends AsyncTask<Context, Context, Boolean>{ private SqliteDBHelper dbHelper = new SqliteDBHelper(
MyApplication.getContext(), "TagManager.db", null, 1);
private SQLiteDatabase db = dbHelper.getWritableDatabase();
private ProgressDialog progressDialog;
private Boolean flag = true; @Override
protected void onProgressUpdate(Context... values) {
progressDialog=new ProgressDialog(values[0]);
progressDialog.setTitle("提示");
progressDialog.setMessage("数据备份中...");
progressDialog.show();
} @Override
protected Boolean doInBackground(Context... arg0) {
String namespace = "http://service.hyan.com/";
String methodName = "getValue";
String WSDL_URI = "http://100702b5.nat123.cc:38965/Service/ServiceHello?wsdl"; Cursor cursor;
publishProgress(arg0);
/* 备份通讯录 */
cursor = db.query("Contact", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String telephone = cursor.getString(cursor
.getColumnIndex("telephone"));
String contact = "{\"name\":" + "\"" + name + "\"" + ","
+ "\"telephone\":" + "\"" + telephone + "\"}";
Log.d("debug", contact);
SoapObject request = new SoapObject(namespace, methodName);
request.addProperty("arg0", "contact");
request.addProperty("arg1", contact);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapSerializationEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.bodyOut = request;
envelope.dotNet = false;
HttpTransportSE ht = new HttpTransportSE(WSDL_URI); try {
Log.d("debug", "调用webservice中.........");
ht.call(null, envelope);
// 获取返回的数据
SoapObject object = (SoapObject) envelope.bodyIn;
// 获取返回的结果
String result = object.getProperty(0).toString();
Log.d("debug", result);
} catch (Exception e) {
e.printStackTrace();
flag = false;
}
} while (cursor.moveToNext());
}
cursor.close();
@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss();
if(flag){
Toast.makeText(MyApplication.getContext(), "备份成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MyApplication.getContext(), "备份失败", Toast.LENGTH_SHORT).show();
}
} }

不过还是没搞明白为什么webservice局域网无法访问....

Android局域网访问webservice以及其中的一些问题的更多相关文章

  1. Android访问WebService的两种方法

    首先解释一下WebService:WebService是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.详细见:http://baik ...

  2. WebService---Android中访问WebService接口的方法

     最近公司有个项目需要从Android平台访问WebService接口,实现向发布的函数传递对象.在网上找了一些资料,发现使用ksoap2可以调用WebService传递对象.   需要引入ksoap ...

  3. Android实现KSOAP2访问WebService

    Android实现KSOAP2访问WebService 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 写一个工具类来给主界面使用,作用是使用 ...

  4. 如何解析android访问webservice返回的SoapObject数据(可用)

    怎么解析android访问webservice返回的SoapObject数据 本帖最后由 kkDragon123 于 2013-03-26 15:50:07 编辑 我的数据如下:mingdanResp ...

  5. (转)Android访问webservice

    纠正网上乱传的android调用Webservice方法.   1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦 ...

  6. 在Android中调用WebService

    某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...

  7. 从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现

    相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人 ...

  8. Android Permission 访问权限大全(转)

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES允 ...

  9. Android存储访问及目录

    Android存储访问及目录 Android的外部存储 Android支持外部存储(case-insensitive filesystem with immutable POSIX permissio ...

随机推荐

  1. android自定义View绘制圆形头像与椭圆头像

    要实现这两种效果,需要自定义View,并且有两种实现方式.   第一种: public class BitmapShaders extends View {     private  BitmapSh ...

  2. Jboss提示:Server already running on localhost

    最近在做项目中,经常遇到JBoss报如下提示:Server already running on localhost.这时Jboss显示已启动,但页面显示不出来.提示中给出了两种解决办法,运行新的服务 ...

  3. java生成和解析二维码

    前言 现在,二维码的应用已经非常广泛,在线生成器也是诸多,随手生成. 所以就和大家分享一个小案例,用zxing来做一个的二维码生成器,当然这个例子是比较简单,若是写的不好请多多包涵. ZXING项目是 ...

  4. HTML5表单提交与PHP环境搭建

    PHP服务器使用xampp集成套件 路径 D:\xampp\htdocs\MyServer\index.php 访问 http://localhost/MyServer/index.php 能够正常显 ...

  5. 【bzoj4548】小奇的糖果 STL-set+树状数组

    题目描述 平面上有n个点,每个点有一种颜色.对于某一条线段,选择所有其上方或下方的点.求:在不包含所有颜色的点的前提下,选择的点数最多是多少.(本题中如果存在某颜色没有相应的点,那么选择任何线段都不算 ...

  6. appendTo()方法和append()方法

    appendTo() 方法在被选元素的结尾(仍然在内部)插入指定内容.

  7. BZOJ4668 冷战(并查集)

    显然可以用LCT维护kruskal重构树.或者启发式合并维护kruskal重构树的倍增数组虽然多了个log也不一定比LCT慢吧. 当然这里的kruskal重构树几乎只是把树上的边权换成了点权,并不重要 ...

  8. Hadoop上配置Hbase数据库

    已有环境: 1. Ubuntu:14.04.2 2.jdk: 1.8.0_45 3.hadoop:2.6.0 4.hBase:1.0.0 详细过程: 1.下载最新的Hbase,这里我下载的是hbase ...

  9. [洛谷P1887]乘积最大3

    题目大意:请你找出$m$个和为$n$的正整数,他们的乘积要尽可能的大.输出字典序最小的方案 题解:对于一些数,若它们的和相同,那么越接近它们的乘积越大. 卡点:无 C++ Code: #include ...

  10. [Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...