2017-10-02 3 views
3

입력 내용이 autoCompleteTextView에 입력되면 동일한 제안 사항이 여러 번 표시되는 프로그램에 문제가 계속 발생합니다. 이 문제가 발생하지 않도록 솔루션을 통해 실제로 할 수 있습니다. 이미지에 대한 링크는 아래 입니다 :AutoCompleteTextView suggestions repeating

enter image description here

이 데이터베이스에 저장된 값은 AutoCompleteTextView에 대한 제안으로 사용되어야하는 과제입니다.

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> 
다음은 MainActivity에 대한 코드입니다
+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

MainActivity에서 onCreate까지 class myDatabase 으로 이동하십시오. 예 :

@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]); 

    } 
} 

이전에 "Apple INK, ..., Apple INK"로 많은 레코드가있는 이전 데이터베이스를 삭제 (삭제)해야합니다.