Android - 未为 Cursor 类型定义 getType(int)

Posted

技术标签:

【中文标题】Android - 未为 Cursor 类型定义 getType(int)【英文标题】:Android - getType(int) is undefined for the type Cursor 【发布时间】:2012-05-02 12:02:10 【问题描述】:

我是移动开发的新手,所以我决定使用 Phonegap 来开发我的应用程序。在我的应用程序中,我使用的是 SQLite 插件,因为 WebSQL 没有满足我的需求。当我尝试将使用该插件所需的文件之一放入我的项目中时,Eclipse 在以下函数中返回错误:

public void processResults(Cursor cur, String query_id, String tx_id) 

    String result = "[]";
    // If query result has rows

    if (cur.moveToFirst()) 
        JSONArray fullresult = new JSONArray();
        String key = "";
        int colCount = cur.getColumnCount();

        // Build up JSON result object for each row
        do 
            JSONObject row = new JSONObject();
            try 
                for (int i = 0; i < colCount; ++i) 
                    key = cur.getColumnName(i);
                    // for old android SDK remove lines from HERE:
                    if(android.os.Build.VERSION.SDK_INT >= 11)
                    
                        switch(cur.getType (i))
                        
                            case Cursor.FIELD_TYPE_NULL:
                                row.put(key, null);
                                break;
                            case Cursor.FIELD_TYPE_INTEGER:
                                row.put(key, cur.getInt(i));
                                break;
                            case Cursor.FIELD_TYPE_FLOAT:
                                row.put(key, cur.getFloat(i));
                                break;
                            case Cursor.FIELD_TYPE_STRING:
                                row.put(key, cur.getString(i));
                                break;
                            case Cursor.FIELD_TYPE_BLOB:
                                row.put(key, cur.getBlob(i));
                                break;
                        
                    
                    else // to HERE.
                    
                        row.put(key, cur.getString(i));
                    
                
                fullresult.put(row);

             catch (JSONException e) 
                e.printStackTrace();
            

         while (cur.moveToNext());

        result = fullresult.toString();
    
    if(query_id.length() > 0)
        this.sendjavascript(" SQLitePluginTransaction.queryCompleteCallback('" + tx_id + "','" + query_id + "', " + result + ");");


在第 20 行(当我们有“switch(cur.getType (i))”时),Eclipse 返回以下错误:

The method getType(int) is undefined for the type Cursor

当我看到这个时,我尝试用谷歌搜索它,并且在 Android 的文档中说 getType 是 Cursor 的方法。

这是此文件导入的内容:

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
import android.database.Cursor;
import android.database.sqlite.*;
import android.util.Log;

由于不了解 Java,我无法弄清楚这一点,并且在我的搜索中没有找到任何东西,但我可能遗漏了一些东西。希望有人能帮帮我,谢谢

【问题讨论】:

【参考方案1】:

您的目标是哪个版本的 Android? getType method was added in API 11(蜂窝)。

您可以在标题的右侧看到此内容(“自:API 级别 11”),并且您可能会发现参考页面顶部的“按 API 级别过滤”框很有用。

【讨论】:

不幸的是,您将无法在 Honeycomb 之前自动迭代所有 Cursor 列。如果它是您的数据库,那么您碰巧知道列类型(正如您指定的那样!)否则由文档来告诉您。例如,ContactsContract.ContactsColumns 具有给定类型。您必须调整代码以将每一列提取为正确的类型。

以上是关于Android - 未为 Cursor 类型定义 getType(int)的主要内容,如果未能解决你的问题,请参考以下文章

getcontentresolver() 未为该类型定义

未为 InvoiceTemplateGet 类型定义方法 execute()

未为“对象”类型定义运算符“[]”[重复]

未为类型定义运算符“[]”尝试定义运算符“[]”

错误“未为 UserManager 类型定义方法 createUser(String, int)”

Selenium Webdriver:方法 alert() 未为 WebDriver.TargetLocator 类型定义