java 接口调用,根据接口文档写测试,用post方法,刚怎么做啊,有个完整的例子么
可使用android自带的httpclient框架实现。
//先将参数放入List,再对参数进行URL编码
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
paramsadd(new BasicNameValuePair("param1", "数据")); //增加参数1
paramsadd(new BasicNameValuePair("param2", "value2"));//增加参数2
String param = URLEncodedUtilsformat(params, "UTF-8");//对参数编码
String baseUrl = "服务器接口完整URL";
HttpGet getMethod = new HttpGet(baseUrl + "" + param);//将URL与参数拼接
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClientexecute(getMethod); //发起GET请求
Logi(TAG, "resCode = " + responsegetStatusLine()getStatusCode()); //获取响应码
Logi(TAG, "result = " + EntityUtilstoString(responsegetEntity(), "utf-8"));//获取服务器响应内容
} catch (ClientProtocolException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
2 POST方式 方式传递参数
//和GET方式一样,先将参数放入List
params = new LinkedList<BasicNameValuePair>();
paramsadd(new BasicNameValuePair("param1", "Post方法"));//增加参数1
paramsadd(new BasicNameValuePair("param2", "第二个参数"));//增加参数2
try {
HttpPost postMethod = new HttpPost(baseUrl);//创建一个post请求
postMethodsetEntity(new UrlEncodedFormEntity(params, "utf-8")); //将参数填入POST Entity中
HttpResponse response = httpClientexecute(postMethod); //执行POST方法
Logi(TAG, "resCode = " + responsegetStatusLine()getStatusCode()); //获取响应码
Logi(TAG, "result = " + EntityUtilstoString(responsegetEntity(), "utf-8")); //获取响应内容
} catch (UnsupportedEncodingException e) {
eprintStackTrace();
} catch (ClientProtocolException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
接口可以看成是没有实例域的抽象类,是为了实现Java多重继承的功能。
接口可以将做什么和怎么做分离开,接口定义要做什么,通过implements Interface的类实现接口的function。
也就是这个类具有这个接口的方法,我们可以通过实例化这个类的对象,调用其所具有的接口的方法和自身的方法。
String sendPost(String jsonStr, String path)\x0d\ throws IOException {\x0d\ byte[] data = jsonStrgetBytes();\x0d\ javanetURL url = new javanetURL(path);\x0d\ javanetHttpURLConnection conn = \x0d\ (javanetHttpURLConnection) urlopenConnection();\x0d\ connsetRequestMethod("POST");\x0d\ connsetConnectTimeout(5 1000);// 设置连接超时时间为5秒 \x0d\ connsetReadTimeout(20 1000);// 设置读取超时时间为20秒 \x0d\ // 使用 URL 连接进行输出,则将 DoOutput标志设置为 true\x0d\ connsetDoOutput(true);\x0d\ \x0d\ connsetRequestProperty("Content-Type", "text/xml;charset=UTF-8");\x0d\ //connsetRequestProperty("Content-Encoding","gzip");\x0d\ connsetRequestProperty("Content-Length", StringvalueOf(datalength));\x0d\ OutputStream outStream = conngetOutputStream();// 返回写入到此连接的输出流\x0d\ outStreamwrite(data);\x0d\ outStreamclose();//关闭流\x0d\ String msg = "";// 保存调用http服务后的响应信息\x0d\ // 如果请求响应码是200,则表示成功\x0d\ if (conngetResponseCode() == 200) {\x0d\ // HTTP服务端返回的编码是UTF-8,故必须设置为UTF-8,保持编码统一,否则会出现中文乱码\x0d\ BufferedReader in = new BufferedReader(new InputStreamReader(\x0d\ (InputStream) conngetInputStream(), "UTF-8"));\x0d\ msg = inreadLine();\x0d\ inclose();\x0d\ }\x0d\ conndisconnect();// 断开连接\x0d\ return msg;\x0d\ }
hMailServer 是接口 他的实现子类是Mail;
在java中调用就是: hMailServer hms= new Mail();
接口:
public interface HmailServer {
public void run();
}
实现类
public class Mail implements HmailServer{
@Override
public void run() {
Systemoutprintln("跑跑");
}
public static void main(String[] args) {
HmailServer hms=new Mail();
hmsrun();
}
}
运行结果:跑跑
书写步骤 一般分为以下:
1、 编写带有native声明的方法的java类
2、 使用javac命令编译所编写的java类
3、 使用javah jni java类名生成扩展名为h的头文件
4、 使用C/C++实现本地方法
5、 将C/C++编写的文件生成动态连接库
给你看看以前写的获取电话号码归属地的代码的三种方法,然后你就懂了。
import javaioByteArrayOutputStream;import javaioFileInputStream;
import javaioIOException;
import javaioInputStream;
import javanetHttpURLConnection;
import javanetURL;
import orgapachecommonshttpclientHttpClient;
import orgapachecommonshttpclientHttpException;
import orgapachecommonshttpclientmethodsPostMethod;
public class MobileCodeService {
public void httpGet(String mobile,String userID) throws Exception
{
//http://wswebxmlcomcn/WebServices/MobileCodeWSasmx/getMobileCodeInfomobileCode=string&userID=string
URL url = new URL("http://wswebxmlcomcn/WebServices/MobileCodeWSasmx/getMobileCodeInfomobileCode="+mobile+"&userID="+userID);
HttpURLConnection conn =(HttpURLConnection)urlopenConnection();
connsetConnectTimeout(5000);
connsetRequestMethod("GET");
if(conngetResponseCode()==HttpURLConnectionHTTP_OK) //200
{
InputStream is= conngetInputStream();
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); //
byte [] buf = new byte[1024];
int len = -1;
while((len = isread(buf))!=-1)
{
//获取结果
arrayOutputStreamwrite(buf, 0, len);
}
Systemoutprintln("Get方式获取的数据是:"+arrayOutputStreamtoString());
arrayOutputStreamclose();
isclose();
}
}
public void httpPost(String mobile,String userID) throws HttpException, IOException
{
//访问路径 http://wswebxmlcomcn/WebServices/MobileCodeWSasmx/getMobileCodeInfo
//HttpClient访问
HttpClient httpClient = new HttpClient();
PostMethod pm = new PostMethod("http://wswebxmlcomcn/WebServices/MobileCodeWSasmx/getMobileCodeInfo");
pmsetParameter("mobileCode", mobile);
pmsetParameter("userID", userID);
int code= httpClientexecuteMethod(pm);
Systemoutprintln("状态码:"+code);
//获取结果
String result = pmgetResponseBodyAsString();
Systemoutprintln("获取到的数据是:"+result);
}
public void SOAP() throws Exception
{
HttpClient client = new HttpClient();
PostMethod method = new PostMethod("http://wswebxmlcomcn/WebServices/MobileCodeWSasmx");
//设置访问方法的参数
methodsetRequestBody(new FileInputStream("C:\\soapxml"));
methodsetRequestHeader("Content-Type","text/xml; charset=utf-8");
int code= clientexecuteMethod(method);
Systemoutprintln("状态码:"+code);
//获取结果
String result = methodgetResponseBodyAsString();
Systemoutprintln("获取到的数据是:"+result);
}
public static void main(String[] args) throws Exception {
MobileCodeService mcs=new MobileCodeService();
mcshttpGet("18524012513", "");
//mcshttpPost("18524012513", "");
//mcsSOAP();
}
}
这个是编程中经常遇到的一些情况,下面分享一下个人的一些使用经验:
第一,jni方式调用c接口。通过将c语言接口封装为jni的方式直接供java语言调用,这个可以说是最惯用的方式。
第二,jna方式调用c接口。jna也是其中一种调用c接口的方式。使用时可以加载动态库dll或so,然后调用库中的接口。
第三,如果c接口很简单,可以将c接口编译为可执行程序,使用java直接调用可执行程序,也不失为一种简单快捷的方式。
至于以上三种方式如何调用,本回答不再赘述。
本人具有多年的java开发经验,熟悉多种框架,熟悉网络编程,熟悉java安全编程,熟悉大数据,熟悉多种安全协议,熟悉并发编程,有兴趣的同学可以互相关注,互相学习!!!
JAVA如何调用C语言接口
0条评论