`
kylines
  • 浏览: 87284 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

android如何利用基于Http 协议的WebService服务来获取远程数据库数据

阅读更多
初学android,这个问题困扰了多天,在搜索引擎及论坛各位高手的帮助下,现在终于给搞定了,在这里分享给大家,希望对大家有所帮助!(其实本来是尝试用SOAP协议的,试了n天,无果,无奈又只能回到http了!)先来看看服务器端吧!

首先新建一个ASP.NET Web服务应用程序,我这里将其命名为ShopService,具体代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using BLL.Shop;
using System.Web.Script.Services;

namespace WebService
{
    /// <summary>
    /// ShopService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://具体的根据你的需要咯/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    [System.Web.Script.Services.ScriptService]

    public class ShopService : System.Web.Services.WebService
    {
        [WebMethod]
        //[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string getShopItems(string userId, int type)
        {
            Shop shop = new Shop();
            return shop.getShopItems(userId, type);
        }
    }
}

然后再来看看android客户端,我就直接上代码了
package com.xxx;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONObject;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class WebserviceTookit {
	// private static final String TAG = "ShopItems";
	private static final String WEBSERVICE_IP = "http://10.0.2.2:14294";

	public static String getShopItems(String userId, int type) {
		try {
			// 调用带参数的WebMethod
			final String SERVER_URL = WEBSERVICE_IP
					+ "/ShopService.asmx/getShopItems"; // 带参数的WebMethod
			HttpPost request = new HttpPost(SERVER_URL); // 根据内容来源地址创建一个Http请求
			request.addHeader("Content-Type", "application/json; charset=utf-8");// 必须要添加该Http头才能调用WebMethod时返回JSON数据
			JSONObject jsonParams = new JSONObject();
			jsonParams.put("userId", userId);// 传参
			jsonParams.put("type", type);
			HttpEntity bodyEntity = new StringEntity(jsonParams.toString(),
					"utf8");// 参数必须也得是JSON数据格式的字符串才能传递到服务器端,否则会出现"{'Message':'xxx是无效的JSON基元'}"的错误
			request.setEntity(bodyEntity);

			HttpParams httpParameters = new BasicHttpParams();
			// Set the timeout in milliseconds until a connection is
			// established.
			// The default value is zero, that means the timeout is not used.
			int timeoutConnection = 3 * 1000;
			HttpConnectionParams.setConnectionTimeout(httpParameters,
					timeoutConnection);
			// Set the default socket timeout (SO_TIMEOUT)
			// in milliseconds which is the timeout for waiting for data.
			int timeoutSocket = 5 * 1000;
			HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

			DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
			HttpResponse httpResponse = httpClient.execute(request); // 发送请求并获取反馈
			// 解析返回的内容
			if (httpResponse.getStatusLine().getStatusCode() == 200) // StatusCode为200表示与服务端连接成功
			{
				StringBuilder builder = new StringBuilder();
				BufferedReader bufferedReader2 = new BufferedReader(
						new InputStreamReader(httpResponse.getEntity()
								.getContent()));
				for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2.readLine()) {
					builder.append(s);
				}

				String resultString = builder.toString();
				resultString = JSONToolkit.removeEscape(resultString);

				return resultString;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
		return "";
	}
}


运行时记得关闭防火墙或者添加例外端口~
2
1
分享到:
评论
3 楼 whsky 2013-01-07  
楼主才份源码,C#服务端,非常感谢
xiege2012@gmail.com
2 楼 kylines 2012-12-18  
yzxqml 写道
楼主有试过用SOAP协议传输数据么?现在正在纠结到底是用HTTP还是SOAP。

我当时尝试使用ksoap向webserice来传输数据,遇到了问题没能搞定,后来就换http方式了,用json格式封装传输的数据,效果也不错
1 楼 yzxqml 2012-12-11  
楼主有试过用SOAP协议传输数据么?现在正在纠结到底是用HTTP还是SOAP。

相关推荐

    Android配合WebService访问远程数据库.docx

    在本文中,我们将介绍如何使用 WebService 访问远程数据库,并在 Android 客户端中调用服务器端方法获取数据。 首先,我们需要了解什么是 WebService。WebService 是一种基于 SOAP 协议的远程调用标准,通过 ...

    android访问远程数据库

    ### Android 访问远程数据库——通过 WebServer 实现数据交互 在移动开发领域,特别是针对 Android 平台的应用开发过程中,经常会遇到需要与远程服务器进行数据交换的需求。本篇文章将详细探讨如何通过搭建 Web...

    labview调用webservice访问远程数据1

    我们可以使用 WebService 来访问远程数据库,而不需要考虑网络限制。 LabVIEW 是一个功能强大的开发平台,它可以轻松地集成 WebService 来访问远程数据。 在本篇文章中,我们将使用 LabVIEW 调用 WebService 来访问...

    Android通过WebService访问SQLServer

    本教程主要探讨如何在Android应用中通过WebService访问SQLServer数据库,实现数据的增、删、查操作。以下是相关知识点的详细说明: 1. **Android平台与Web服务的交互**: Android系统提供了多种方式与远程服务器...

    android登录,webservice连接sql数据库,布局实现界面切换

    在这个项目中,我们看到了一个通过Web服务连接SQL数据库的实现方式,以及如何利用Android的布局管理器进行界面切换。以下是相关知识点的详细说明: 1. **Android登录界面**: - 使用Android Studio创建一个新的...

    通过webservice连接数据库

    WeberService作为一种远程服务调用技术,常用于不同系统间的通信,而SOAP(Simple Object Access Protocol)协议是其中的一种标准,它允许应用程序通过HTTP协议交换结构化信息。 首先,理解WebService的基本概念是...

    Android之Webservice详解与调用天气预报Webservice完整实例

    在Android开发中,Webservice是一种常见的数据交互方式,它允许移动应用通过网络获取远程服务器上的数据。本实例将深入探讨Android中如何使用Webservice,特别是针对天气预报服务的调用。我们将关注以下几个核心知识...

    android 调用 Webservice源码

    总之,Android调用Webservice源码的示例是一个很好的学习资源,它展示了Android客户端如何利用ksoap2库与C#编写的Web服务进行交互。通过理解这个示例,开发者可以更好地掌握Android与Web服务的集成技术,为自己的...

    android、webService 天气预报demo

    本Demo结合了Android客户端和WebService技术,为用户展示如何从远程服务器获取并展示天气预报数据。通过这个实例,我们可以深入理解Android网络编程以及与WebService的交互方式。 一、Android网络请求基础 在...

    Android配合WebService(包含包)

    本示例主要围绕Android如何利用Web Service(通常为SOAP或RESTful服务)来实现这一功能。标题提到的“Android配合WebService例子”意味着我们将探讨如何在Android应用中集成并使用Web Service。 首先,我们要了解...

    WebService+Android

    【WebService+Android】是将Web服务技术应用到Android平台上的一个重要实践,主要目的是为了实现远程数据交换和交互。Web服务,通常基于SOAP(Simple Object Access Protocol)或REST(Representational State ...

    android调用.net的webservice的例子获取手机的归属地

    在Android应用开发中,有时需要调用远程服务来获取特定的数据或执行某些功能。本示例探讨了如何从Android客户端调用.NET构建的Web服务,以获取手机的归属地信息。这种技术通常用于地理位置追踪、广告定位或其他需要...

    android连接数据库实例

    本实例将详细介绍如何在Android中连接和操作数据库,以及如何通过Web服务与远程数据库进行通信。首先,让我们了解一下Android数据库系统的基础。 Android使用SQLite作为其内置的轻量级数据库系统,它非常适合移动...

    基于WebService的掌上视频监控系统

    【基于WebService的掌上视频监控系统】是一种利用网络通信技术和移动设备实现远程视频监控的应用。在这一系统中,主要涉及到的技术包括WebService、移动应用开发以及视频处理与传输。以下是相关知识点的详细介绍: ...

    Android调用.net webservice数据传递所需类库

    在Android平台上,与远程服务进行交互是常见的需求,特别是调用.NET Web Service。.NET Web Service通常使用SOAP协议,而Android则需要一个合适的库来处理这些请求。这就是ksoap2库的角色,它允许Android应用与基于...

    Android通过Webservice操作sqlserver数据库实例代码

    在Android应用开发中,有时需要与远程服务器进行数据交互,比如使用SQL Server数据库。本教程将详细介绍如何在Android中通过WebService接口操作SQL Server数据库。首先,确保在AndroidManifest.xml文件中添加了必要...

    Android通过webservice连接Sqlserver实例

    在Android应用开发中,有时需要与远程服务器进行...这使得Android客户端能够执行远程数据库操作,从而实现数据的同步和交换。在实际项目中,需要根据具体需求调整代码,并进行充分的测试以确保功能的稳定性和可靠性。

    基于android简单的天气预报软件

    2. **网络请求**:天气预报应用需要从远程服务器获取数据,这通常通过HTTP或HTTPS协议实现。在Android中,可以使用`HttpURLConnection`或者第三方库如`Volley`、`Retrofit`来发起网络请求。由于Android的网络操作不...

    android sql

    在压缩包文件"android-connect-to-SQL-Server-On-PC-by-webservice-master"中,我们可以推断出它包含了一个示例项目,展示了如何使用Web服务(可能是基于HTTP的服务)来连接到PC上的SQL Server数据库。这通常涉及到...

Global site tag (gtag.js) - Google Analytics