Android中BeanShell的调试和查找错误

Android中BeanShell的调试和查找错误,android,json,beanshell,pawserver,Android,Json,Beanshell,Pawserver,我使用的是HTML中的paw服务器和bean shell脚本,它们以JSON形式返回数据。不知何故,我无法从脚本中获取任何数据,也无法调试脚本 这是密码 <bsh> import android.net.Uri; import android.provider.Contacts.People; import android.provider.Contacts.Phones; import java.text.DateFormat; service = server.props.ge

我使用的是HTML中的paw服务器和bean shell脚本,它们以JSON形式返回数据。不知何故,我无法从脚本中获取任何数据,也无法调试脚本

这是密码

<bsh>
import android.net.Uri;
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
import java.text.DateFormat;

service = server.props.get("serviceContext");
delete = parameters.get("delete");

SMS_CONTENT_URI = Uri.parse("content://sms");

// ArrayList for thread information
listThreads = new ArrayList();

URI = Uri.parse("content://sms");

// --- Thread IDs
cur = service.getContentResolver().query(URI, new String[] {"DISTINCT thread_id"}, null, null, "date DESC");
threadIDs = new ArrayList();
if(cur.moveToFirst()) {
    do {
        threadIDs.add(cur.getInt(0));
    } while(cur.moveToNext());
}
cur.close();

print("[");
//--- Get infos

Integer it = 0;
for(id : threadIDs) {
    // ArrayList for this thread information
    listThreadInfo = new ArrayList();


   /* List content
      0: Thread ID (int)
      1: Address (String)
      2: Name (might be null) (String)
      3: Contact ID (might be 0) (int)
      4: Date (Date)
      5: Messages in Thread (int)
      6: Body (String)
      7: Unread messages (int)
   */

    // -- Messages in thread
    cur = service.getContentResolver().query(URI, new String[] { "COUNT(thread_id)" }, "thread_id=?", new String[] { "" + id }, null);
    cur.moveToFirst();
    count = cur.getInt(0);
    cur.close();

    // -- Unread messages
    cur = service.getContentResolver().query(URI, new String[] { "COUNT(read)" }, "thread_id=? AND read == 0", new String[] { "" + id }, null);
    cur.moveToFirst();
    unread = cur.getInt(0);
    cur.close();

    cur = service.getContentResolver().query(URI, null, "thread_id=?", new String[] { "" + id }, "date DESC LIMIT 1");
    if(cur.moveToFirst()) {
        do {
            contactId = cur.getInt(cur.getColumnIndex("person"));
            address = cur.getString(cur.getColumnIndex("address"));
            date = new Date(cur.getLong(cur.getColumnIndex("date")));
            body = cur.getString(cur.getColumnIndex("body"));

            // Only if address != null. Otherwise it's a DRAFT
            if(address != null) {

                name = null;

                phones = service.getContentResolver().query(
                    android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[] { android.provider.ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID },
                    android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[] { address }, null
                );

                if(phones.moveToFirst()) {
                    contactId = phones.getInt(0);
                }

                phones.close();

                if(contactId != 0) {

                    contact = service.getContentResolver().query(
                        android.provider.ContactsContract.Data.CONTENT_URI, new String[]{android.provider.ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME }, 
                        android.provider.ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + 
                        android.provider.ContactsContract.CommonDataKinds.StructuredName.MIMETYPE + "=?", new String[] { "" + contactId, android.provider.ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }, null
                    );

                    if(contact.moveToFirst()) {
                        name = contact.getString(0);
                    }

                    contact.close();
                }

                listThreadInfo.add(0, id);
                listThreadInfo.add(1, address);
                listThreadInfo.add(2, name);
                listThreadInfo.add(3, contactId);
                listThreadInfo.add(4, date);
                listThreadInfo.add(5, count);
                listThreadInfo.add(6, body);
                listThreadInfo.add(7, unread);

                body =  body.replace("\n", "<br>").replace("\t", "    ").replace("\"", "\\\"");

                print("{");
                print("\t\"id\" : " + id + ",");
                print("\t\"addr\" : \"" + address + "\",");
                print("\t\"name\" : \"" + name + "\",");
                print("\t\"contactId\" : " + contactId+ ",");
                print("\t\"date\" : " + date.getTime() + ",");
                print("\t\"count\" : " + count + ",");
                print("\t\"body\" : \"" + body + "\",");
                print("\t\"img\" : \"graphics/seeContactImg.xhtml?contactId=" + contactId + "\",");
                print("\t\"unread\" : " + unread);
                print("}");

                it++;
                if(it < threadIDs.size()) {
                    print(",");
                }
                listThreads.add(listThreadInfo);
            }
        } while(cur.moveToNext());
    }
    cur.close();
}
print("]");
</bsh>

导入android.net.Uri;
导入android.provider.Contacts.People;
导入android.provider.Contacts.Phones;
导入java.text.DateFormat;
service=server.props.get(“serviceContext”);
delete=parameters.get(“delete”);
SMS_CONTENT_URI=URI.parse(“content://sms");
//线程信息的ArrayList
listThreads=newArrayList();
URI=URI.parse(“content://sms");
//---线程ID
cur=service.getContentResolver();
threadIDs=newarraylist();
if(cur.moveToFirst()){
做{
threadIDs.add(cur.getInt(0));
}while(cur.moveToNext());
}
cur.close();
打印(“[”);
//---获取信息
整数it=0;
用于(id:ThreadID){
//此线程信息的ArrayList
listThreadInfo=新的ArrayList();
/*列表内容
0:线程ID(int)
1:地址(字符串)
2:名称(可能为空)(字符串)
3:联系人ID(可能是0)(int)
4:日期(日期)
5:线程中的消息(int)
6:主体(线)
7:未读邮件(int)
*/
//--线程中的消息
cur=service.getContentResolver().query(URI,新字符串[]{“COUNT(thread_id)”},“thread_id=?”,新字符串[]{“+id},null);
cur.moveToFirst();
count=cur.getInt(0);
cur.close();
//--未读消息
cur=service.getContentResolver().query(URI,新字符串[]{“计数(读取)”},“线程id=?和读取==0”,新字符串[]{“+id},null);
cur.moveToFirst();
未读=当前getInt(0);
cur.close();
cur=service.getContentResolver().query(URI,null,“线程id=?”,新字符串[]{“+id}”,日期描述限制1);
if(cur.moveToFirst()){
做{
contactId=cur.getInt(cur.getColumnIndex(“person”);
地址=cur.getString(cur.getColumnIndex(“地址”);
日期=新日期(当前getLong(当前getColumnIndex(“日期”));
body=cur.getString(cur.getColumnIndex(“body”);
//仅当address!=null时。否则为草稿
if(地址!=null){
name=null;
phones=service.getContentResolver().query(
android.provider.ContactsContracts.CommonDataTypes.Phone.CONTENT_URI,新字符串[]{android.provider.ContactsContracts.CommonDataTypes.Phone.RAW_CONTACT_ID},
android.provider.ContactsContract.CommonDataTypes.Phone.NUMBER+“=?”,新字符串[]{address},空
);
if(phones.moveToFirst()){
contactId=phones.getInt(0);
}
电话。关闭();
如果(联系人ID!=0){
contact=service.getContentResolver().query(
android.provider.ContactsContract.Data.CONTENT\u URI,新字符串[]{android.provider.ContactsContract.CommonDataTypes.StructuredName.DISPLAY\u NAME},
android.provider.contacts contract.Data.RAW_CONTACT_ID+“=”和“+
android.provider.ContactsContracts.CommonDataTypes.StructuredName.MimetType+“=?”,新字符串[]{”“+contactId,android.provider.ContactsContracts.CommonDataTypes.StructuredName.CONTENT\u ITEM\u TYPE},空
);
if(contact.moveToFirst()){
name=contact.getString(0);
}
contact.close();
}
listThreadInfo.add(0,id);
listThreadInfo.add(1,地址);
listThreadInfo.add(2,名称);
listThreadInfo.add(3,联系人ID);
listThreadInfo.add(4,日期);
listThreadInfo.add(5,计数);
listThreadInfo.add(6,正文);
listThreadInfo.add(7,未读);
body=body.replace(“\n”,“
”).replace(“\t”,”).replace(“\”,“\ \”); 印刷品(“{”); 打印(“\t\“id\”:“+id+”,”); 打印(“\t\”地址“:\”+地址+“\”,”); 打印(“\t\”名称“:\”+名称+“\”,”); 打印(“\t\”contactId\”:“+contactId+”,”); 打印(“\t\“date\”:“+date.getTime()+”,”); 打印(“\t\”计数“:“+count+”,”); 打印(“\t\“body\”:\”+body+“\”,”); 打印(“\t\“img\”:\“graphics/see contactimg.xhtml?contactId=“+contactId+”\”,”); 打印(“\t\”未读“:“+未读”); 打印(“}”); it++; 如果(它

下面的代码以json格式返回sms。其中有一些错误,但我无法调试,因为它是以.xhtml格式编写的,刚刚在运行Android 6.0的LG G4上测试过,并且运行正常。 如果出现异常,它将显示在页面源中。 要获得更详细的错误消息,可以在conf/handler.xml配置文件中使用BeanShell处理程序的debug参数:

<handler status="active">
    <name>BeanShell Handler</name>
    <description>BeanShell Handler</description>
    <removable>true</removable>
    <id>bsh</id>
    <files />
    <params>
      <param name="bsh.class" value="org.paw.handler.BeanShellFileHandler" />
      <param name="bsh.debug" value="true" />
      <param name="bsh.root" value="[PAW_HOME]/html" />
      <param name="bsh.suffix" value=".xhtml" />
      <param name="bsh.default" value="index.xhtml" />
    </params>
  </handler>

比恩希尔装卸工
比恩希尔装卸工
符合事实的
bsh

请具体说明。这里到底有什么问题?