在Android中的Bean Shell中进行调试和查找错误

艾哈迈德·法拉兹(Ahmad Faraz)

我使用HTML中的爪子服务器和bean外壳脚本,它们以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>

下面的代码以json格式返回sms。其中有些错误,但是由于以.xhtml格式编写,因此我无法调试

joschi70

刚刚在运行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>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android开发是在VM中进行的,但需要在本地设备中进行部署和调试

来自分类Dev

在Visual Studio中进行调试时出现“驱动器中没有磁盘”错误

来自分类Dev

在Excel 2010中进行SUMIFS或IF查找

来自分类Dev

在Excel 2013中进行高级查找?

来自分类Dev

如何在Android Shell中进行计算

来自分类Dev

在Eclipse中进行调试时,Spring无法从共享的Gradle库(自动接线Bean中的依赖项)中找到类

来自分类Dev

如何在WooCommerce 3中进行调试

来自分类Dev

在Android Jelly Bean和Kitkat中通过套接字接收大量数据时出错

来自分类Dev

调试$ digest已经进行中错误

来自分类Dev

Testng中的Bean Shell脚本

来自分类Dev

在Android中进行流式传输时进行GStreamer序列号调试

来自分类Dev

如何在Android Studio中的Android应用程序中进行条款和条件活动

来自分类Dev

如何在Android Studio中的Android应用程序中进行条款和条件活动

来自分类Dev

在iOS / callStackReturnAddresses和callStackSymbols中进行调试

来自分类Dev

Cakephp在浏览器中运行cakephp shell以进行调试

来自分类Dev

Android:如何像在Android Studio中进行调试一样获取应用程序的日志?

来自分类Dev

Android:如何像在Android Studio中进行调试一样获取应用程序的日志?

来自分类Dev

我无法让MUPDF在Android Studio中进行编译。它在Eclipse中运行良好。NDK错误

来自分类Dev

在可拖动的GridView中获取错误以在Android中进行垂直滚动

来自分类Dev

在XCode调试器中查找与错误对应的行

来自分类Dev

骆驼中的“to bean”和“ref bean”有什么区别?

来自分类Dev

Angular:$ apply已在IE11中进行,但未在FF和Chrome中进行

来自分类Dev

在Eclipse中进行调试时,如何查看android SDK系统库的符号?

来自分类Dev

在Android Studio中进行调试时,默认情况下以十六进制显示值

来自分类Dev

在Android Studio中进行调试时,仅当我在断点之后才运行Intent

来自分类Dev

如何在Android中的数组列表中进行getter和setter方法

来自分类Dev

在NSURLConnection中建立错误案例,在Swift中进行JSON解析

来自分类Dev

在NSURLConnection中建立错误案例,在Swift中进行JSON解析

来自分类Dev

使用Kotlin和Duktape在Android中进行JS传播语法

Related 相关文章

  1. 1

    Android开发是在VM中进行的,但需要在本地设备中进行部署和调试

  2. 2

    在Visual Studio中进行调试时出现“驱动器中没有磁盘”错误

  3. 3

    在Excel 2010中进行SUMIFS或IF查找

  4. 4

    在Excel 2013中进行高级查找?

  5. 5

    如何在Android Shell中进行计算

  6. 6

    在Eclipse中进行调试时,Spring无法从共享的Gradle库(自动接线Bean中的依赖项)中找到类

  7. 7

    如何在WooCommerce 3中进行调试

  8. 8

    在Android Jelly Bean和Kitkat中通过套接字接收大量数据时出错

  9. 9

    调试$ digest已经进行中错误

  10. 10

    Testng中的Bean Shell脚本

  11. 11

    在Android中进行流式传输时进行GStreamer序列号调试

  12. 12

    如何在Android Studio中的Android应用程序中进行条款和条件活动

  13. 13

    如何在Android Studio中的Android应用程序中进行条款和条件活动

  14. 14

    在iOS / callStackReturnAddresses和callStackSymbols中进行调试

  15. 15

    Cakephp在浏览器中运行cakephp shell以进行调试

  16. 16

    Android:如何像在Android Studio中进行调试一样获取应用程序的日志?

  17. 17

    Android:如何像在Android Studio中进行调试一样获取应用程序的日志?

  18. 18

    我无法让MUPDF在Android Studio中进行编译。它在Eclipse中运行良好。NDK错误

  19. 19

    在可拖动的GridView中获取错误以在Android中进行垂直滚动

  20. 20

    在XCode调试器中查找与错误对应的行

  21. 21

    骆驼中的“to bean”和“ref bean”有什么区别?

  22. 22

    Angular:$ apply已在IE11中进行,但未在FF和Chrome中进行

  23. 23

    在Eclipse中进行调试时,如何查看android SDK系统库的符号?

  24. 24

    在Android Studio中进行调试时,默认情况下以十六进制显示值

  25. 25

    在Android Studio中进行调试时,仅当我在断点之后才运行Intent

  26. 26

    如何在Android中的数组列表中进行getter和setter方法

  27. 27

    在NSURLConnection中建立错误案例,在Swift中进行JSON解析

  28. 28

    在NSURLConnection中建立错误案例,在Swift中进行JSON解析

  29. 29

    使用Kotlin和Duktape在Android中进行JS传播语法

热门标签

归档