2017-10-02 8 views
3

私は、入力がautoCompleteTextViewに与えられたときに、同じ提案を何回も表示する私のプログラムで問題が発生し続ける。私は実際にこれが起こらないようにするための解決策でできました。画像へのリンクが 以下の通りである:AutoCompleteTextViewの提案を繰り返す

enter image description here

これはデータベースに格納された値はautoCompleteTextViewための提案として使用される割り当てのためのものです。ここでMainActivityのためのコードは次のとおりです。続き

package com.example.ayush.sqliteautocompleteapplication; 

import android.content.ContentValues; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.AutoCompleteTextView; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    String[] companyNames; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myDatabase database = new myDatabase(this); 
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autoComplete); 
    companyNames = new String[]{"Apple INC", "Samsung Electronics", "Amazon.com", "Microsoft", "Hitachi", "IBM", "Sony", "Huawei", "Panasonic", "Hewlett Packard Enterprises"}; 
    ArrayList<String> list = new ArrayList<>(); 

    for (int i = 0; i < companyNames.length; i++) { 
     database.insert_Data(companyNames[i]); 

    } 
    Cursor cursor = database.showProduct(); 

    while (cursor.moveToNext()) { 
     list.add(cursor.getString(cursor.getColumnIndex("name"))); 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,list); 
    textView.setAdapter(adapter); 

    } 
} 

はSQLiteOpenHelperクラスのコードです:

package com.example.ayush.sqliteautocompleteapplication; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/** 
* Created by ayush on 10/2/2017. 
*/ 

public class myDatabase extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "contactsManager"; 
    private static final String TABLE_COMPANIES = "companies"; 
    private static final String KEY_ID = "id"; 
    private static final String KEY_NAME = "name"; 

public myDatabase(Context context) { 
    super(context,DATABASE_NAME,null,DATABASE_VERSION); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_COMPANIES + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT" + 
      ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

public boolean insert_Data(String name) 
{ 
    SQLiteDatabase db=getWritableDatabase();   //to write data into the table 
    ContentValues values=new ContentValues(); 
    values.put(KEY_NAME,name);    //putting the values into ContentValue 
    long res=db.insert(TABLE_COMPANIES,null,values);  //Create a temp variable 
    if(res==-1) 
    { 
     return false;  //if data is not inserted return false 
    } 
    else 
    { 
     return true;   //else return true 
    } 
} 

public Cursor showProduct() { 
    //fetching data 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery("select * from companies", null); 
    if (cursor != null) 
     return cursor; 
    else 
     return null; 
} 

} 

そして、ここでは(念のため)layout.xmlファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    tools:context="com.example.ayush.sqliteautocompleteapplication.MainActivity"> 

    <AutoCompleteTextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/autoComplete" 
     android:completionThreshold="1" 
     /> 

</LinearLayout> 
+0

その出来事あなたはSQLiteのテーブル – akhilesh0707

+0

チェック 'cursor'サイズに挿入されたアプリの記録を実行するたびに、あなたは、実際の問題を取得するため – akhilesh0707

+0

あなたは正しかったakhilesh0707、プログラムが繰り返しに値を挿入まま@データベース。あなたの答えをありがとう。 –

答えて

3

これは、Activityが作成されたときにデータを挿入するたびに発生するためです。データが挿入されているかどうかを確認し、データが挿入されていない場合はdatabaseにデータを入力する必要があります。コードの下に試してみてください

Cursor cursor = database.showProduct(); 
    if(cursor.getCount() == 0){ 
     for (int i = 0; i < companyNames.length; i++) { 
      database.insert_Data(companyNames[i]); 
     } 
     cursor = database.showProduct(); 
    } 

    //Continue with your code 
0

あなたは、例えばclass myDatabaseonCreateMainActivityからdatabase.insert_Data(companyNames[i]);を移動する必要があります。

0123あなたが前に「アップルINK、...、アップルINK」で、レコードの多くの(削除)古いデータベースをクリアする必要があり
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_COMPANIES + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT" + 
      ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE); 
    companyNames = new String[]{"Apple INC", "Samsung Electronics", "Amazon.com", "Microsoft", "Hitachi", "IBM", "Sony", "Huawei", "Panasonic", "Hewlett Packard Enterprises"}; 
    ArrayList<String> list = new ArrayList<>(); 

    for (int i = 0; i < companyNames.length; i++) { 
     database.insert_Data(companyNames[i]); 

    } 
} 

関連する問題