当前位置:  编程技术>移动开发
本页文章导读:
    ▪non-numeric second argument to `wordlist' function        non-numeric second argument to `wordlist' function: 用ndk编译一些c项目的时候,有时会出这个errornon-numeric second argument to `wordlist' function:错误指向 __gmsl文件的第512行网上有一些说法如下:修改文件andro.........
    ▪ 在tableview目录中显示搜索符号的方法        在tableview索引中显示搜索符号的方法 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{NSMutableArray *arr = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];[arr addObject:@"{search}"];//等价于[arr addOb.........
    ▪ 运用JAVA开发微信公众平台接口       使用JAVA开发微信公众平台接口 研究了下微信公众平台接口开发,可回复用户发来的请求 由于腾讯限制不能每天自动群发送信息   WeChatServlet 类: package com.wechat.servlet; import java.io.BufferedReade.........

[1]non-numeric second argument to `wordlist' function
    来源: 互联网  发布时间: 2014-02-18
non-numeric second argument to `wordlist' function:
用ndk编译一些c项目的时候,有时会出这个error
non-numeric second argument to `wordlist' function:

错误指向 __gmsl文件的第512行
网上有一些说法如下:
修改文件android-ndk-r8c/build/gmsl/__gmsl第512行
int_encode = $(__gmsl_tr1)$(wordlist 1,$1,$(__gmsl_input_int))

修改为
int_encode = $(__gmsl_tr1)$(wordlist 1,$(words $1),$(__gmsl_input_int))

[来源于:http://stackoverflow.com/questions/10285242/openssl-using-androids-ndk-problems/10295653#10295653]
这样就可以了
不过偶总觉得这个不靠谱,后来在google官方论坛上看到另外一个解决办法
首先需要在AndroidManifest.xml里面添加sdk版本(感觉至少要设置minSdkVersion)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.ndk"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8"/>

</manifest>

然后一般都可以了,如果出现以下error
Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: /Android.mk

这个一般是环境变量的问题,可以修改下jni/Application.mk文件,添加APP_BUILD_SCRIPT 属性
LOCAL_PATH := $(call my-dir)
APP_BUILD_SCRIPT := $(LOCAL_PATH)/../Android.mk

    
[2] 在tableview目录中显示搜索符号的方法
    来源: 互联网  发布时间: 2014-02-18
在tableview索引中显示搜索符号的方法
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
NSMutableArray *arr = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];
[arr addObject:@"{search}"];//等价于[arr addObject:UITableViewIndexSearch];
return arr;
}

    
[3] 运用JAVA开发微信公众平台接口
    来源: 互联网  发布时间: 2014-02-18
使用JAVA开发微信公众平台接口

研究了下微信公众平台接口开发,可回复用户发来的请求

由于腾讯限制不能每天自动群发送信息

 

WeChatServlet 类:

package com.wechat.servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wechat.utils.EncryptUtil;
import com.wechat.utils.XmlUtil;

public class WeChatServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	//微信平台上填的Token和这里需要一致
	public static final String Token = "loveplat";

	/**
	 * 微信公众平台验证调用方法
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String signature = request.getParameter("signature");
		String timestamp = request.getParameter("timestamp");
		String nonce = request.getParameter("nonce");
		String[] ArrTmp = { Token, timestamp, nonce };
		Arrays.sort(ArrTmp);
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < ArrTmp.length; i++) {
			sb.append(ArrTmp[i]);
		}
		String pwd = EncryptUtil.Encrypt(sb.toString());
		String echostr = request.getParameter("echostr");
		System.out.println("pwd=="+pwd);
		System.out.println("echostr=="+echostr);
		if(pwd.equals(signature)){
			if(!"".equals(echostr) && echostr != null){
				response.getWriter().print(echostr);
			}
		}
	}

	/**
	 * 用户向公众平台发信息并自动返回信息
	 */
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		StringBuffer sb = new StringBuffer();
		String line;
		Map<String, String> map = null;
		try {
			request.setCharacterEncoding("UTF-8");
			BufferedReader reader = request.getReader();
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
			map = XmlUtil.xml2Map(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		sb = new StringBuffer();
	
		sb.append("<xml><ToUserName><![CDATA[").append(
				map.get("xml.FromUserName")).append(
				"]]></ToUserName><FromUserName><![CDATA[").append(
				map.get("xml.ToUserName")).append(
				"]]></FromUserName><CreateTime>").append(
				map.get("xml.CreateTime")).append(
				"</CreateTime><MsgType><![CDATA[text]]></MsgType>").append(
				"<Content><![CDATA[收到");
		sb.append("]]></Content>").append("<FuncFlag>0</FuncFlag></xml>");
		response.setCharacterEncoding("UTF-8");
		System.out.println(sb.toString());
		response.getWriter().print(sb.toString());
	}


	@Override
	public void destroy() {
		super.destroy();
	}

	@Override
	public void init() throws ServletException {
		super.init();
	}

}

 XmlUtil 类:需要导入jdom.jar包

package com.wechat.utils;

import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class XmlUtil {

	public static Map<String, String> xml2Map(String xmlStr)
			throws JDOMException, IOException {
		Map<String, String> rtnMap = new HashMap<String, String>();
		SAXBuilder builder = new SAXBuilder();
		Document doc = builder.build(new StringReader(xmlStr));
		// 得到根节点
		Element root = doc.getRootElement();
		String rootName = root.getName();
		rtnMap.put("root.name", rootName);
		// 调用递归函数,得到所有最底层元素的名称和值,加入map中
		convert(root, rtnMap, rootName);
		return rtnMap;
	}

	/**
	 * 递归函数,找出最下层的节点并加入到map中,由xml2Map方法调用。
	 * 
	 * @param e
	 *           xml 节点,包括根节点
	 * @param map
	 *            目标map
	 * @param lastname
	 *            从根节点到上一级节点名称连接的字串
	 */
	public static void convert(Element e, Map<String, String> map,
			String lastname) {
		if (e.getAttributes().size() > 0) {
			Iterator it_attr = e.getAttributes().iterator();
			while (it_attr.hasNext()) {
				Attribute attribute = (Attribute) it_attr.next();
				String attrname = attribute.getName();
				String attrvalue = e.getAttributeValue(attrname);
				map.put(lastname + "." + attrname, attrvalue);
			}
		}
		List children = e.getChildren();
		Iterator it = children.iterator();
		while (it.hasNext()) {
			Element child = (Element) it.next();
			String name = lastname + "." + child.getName();
			// 如果有子节点,则递归调用
			if (child.getChildren().size() > 0) {
				convert(child, map, name);
			} else {
				// 如果没有子节点,则把值加入map
				map.put(name, child.getText());
				// 如果该节点有属性,则把所有的属性值也加入map
				if (child.getAttributes().size() > 0) {
					Iterator attr = child.getAttributes().iterator();
					while (attr.hasNext()) {
						Attribute attribute = (Attribute) attr.next();
						String attrname = attribute.getName();
						String attrvalue = child.getAttributeValue(attrname);
						map.put(name + "." + attrname, attrvalue);
					}
				}
			}
		}
	}

}

 

EncryptUtil类:

package com.wechat.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class EncryptUtil {

	public static String Encrypt(String strSrc) {
		MessageDigest md = null;
		String strDes = null;

		byte[] bt = strSrc.getBytes();
		try {
			md = MessageDigest.getInstance("SHA-1");
			md.update(bt);
			strDes = bytes2Hex(md.digest()); //to HexString
		} catch (NoSuchAlgorithmException e) {
			System.out.println("Invalid algorithm.");
			return null;
		}
		return strDes;
	}

	public static String bytes2Hex(byte[] bts) {
		String des = "";
		String tmp = null;
		for (int i = 0; i < bts.length; i++) {
			tmp = (Integer.toHexString(bts[i] & 0xFF));
			if (tmp.length() == 1) {
				des += "0";
			}
			des += tmp;
		}
		return des;
	}
	
}

 

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>WeChatServlet</servlet-name>
    <servlet-class>com.wechat.servlet.WeChatServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>WeChatServlet</servlet-name>
    <url-pattern>/WeChatServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  
</web-app>

 

测试案例:

大家可关注微信公众账号:在线匹配交友

微信里面暂时搜索不到,大家可扫描二维码关注,二维码见附件

做了个最简单的回复信息,由于获取不到用户信息还没有想到好的想法

欢迎大家提供宝贵意见

暂时是本机做服务器的如果服务没开可能不会收到自动回复信息


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3