【问题标题】:Error: cannot infer type arguments for ArrayAdapter<> in AutoCompleteTextView错误:无法在 AutoCompleteTextView 中推断 ArrayAdapter<> 的类型参数
【发布时间】:2021-06-25 22:38:52
【问题描述】:

我在使用位于Connection.java 文件中的Names_owner() 函数的查询中生成的所有者名称记录填充RegisterLoan.java 文件中的auto_Owner 变量时遇到问题。

问题出在这一行。

error: cannot infer type arguments for ArrayAdapter<>
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, Field_owner);
  • activity_register_loan.xml
          <AutoCompleteTextView
            android:id="@+id/auto_Owner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLength="30"
            android:layout_margin="5dp"
            android:completionThreshold="1"
            android:inputType="textCapWords|textCapSentences"
            android:hint="Enter the owner's name" />
  • Connection.java
public class Connection extends SQLiteOpenHelper {

    private static int version = 1;
    private static String base = "book_app";
    private SQLiteDatabase SQLiteBD;

    // Table owner
    private static final String table_owner = "owner";
    public static final String id_owner = "id_owner";
    public static final String name_owner = "name_owner";
    public static final String email_owner = "email_owner";
    public static final String telephone_owner = "telephone_owner";
    
    public Connection(@Nullable Context context){
        super(context, base, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + table_owner +
                "(" + id_owner + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
                + name_owner + " TEXT NOT NULL,"
                + email_owner + " TEXT NOT NULL,"
                + telephone_owner + " TEXT NOT NULL);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
        
    public Cursor Names_owner() {
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "SELECT " + name_owner + " FROM " + table_owner + " ORDER BY " + id_owner;
        Cursor cursor = db.rawQuery(query, null);
        return cursor;
    }
}
  • RegisterOwner.java
public class RegisterOwner extends AppCompatActivity {
    
    AutoCompleteTextView auto_Owner;
    Cursor Field_owner;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_loan);
        
        autoOwner = findViewById(R.id.autoOwner);
       
        Connection connection = new Connection(this);
        Field_owner = connection.Names_owner();
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, Field_owner);
        autoDono.setAdapter(adapter);
        
    }
}

【问题讨论】:

  • RegisterLoan 页面甚至无法启动,应用程序崩溃。

标签: java android sqlite android-sqlite autocompletetextview


【解决方案1】:

您必须传递字符串的 ArrayList 作为 ArrayAdapter 构造函数的 3d 参数,但您传递 Field_owner 这是一个 Cursor 对象。

你必须遍历游标并用它的值填充一个列表,然后将该列表传递给构造函数:

Field_owner = connection.Names_owner();
ArrayList<String> names = new ArrayList<>();
while (Field_owner.moveToNext()) {
    names.add(Field_owner.getString(0));
}
Field_owner.close();
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, names);
autoDono.setAdapter(adapter);
    

【讨论】:

  • names 来自哪里?
  • @Boranoro names 是一个 ArrayList,其中填充了游标 Field_owner 中返回的名称。
  • 现在解决方案对我来说更清楚了,感谢您的帮助。
【解决方案2】:

我发现您的代码存在问题,字段所有者是返回字符串对象的游标类型,但您的数组适配器需要字符串值,您可以:

  • 设置将字段所有者作为字符串参数传递给数组适配器

ArrayAdapter 适配器 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, Field_owner.toString());

或者

  • 单独创建一个字符串值并使用它来解析游标的值

String text = String.parse(光标值);

ArrayAdapter 适配器 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, text);

【讨论】:

  • ArrayAdapter 不想要一个字符串,而是一个字符串列表作为 3d 参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多