2015-08-25 93 views
1

我想比較微調整數類型列表和位置。整數列表包含來自數據庫的ID列表,並且微調器包含關於ID的名稱列表。將ID和名稱存儲在數據庫中,比較列表中的ID和微調器的位置後,將兩個編輯文本框設置爲與名稱以外的特定ID對應的值。 該ID設置爲自動增量。 這裏是在MainActivity:不兼容的操作數類型r.integer和int

public class LoginActivity extends AppCompatActivity { 

Button b; 
EditText ed1, ed2, ed3; 
Spinner sp; 
String url = "https://web.facebook.com/"; 
String urltest = "http://www.google.com/"; 
WebView wb; 
database db; 
String details[]; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    b = (Button) findViewById(R.id.button1); 
    ed1 = (EditText) findViewById(R.id.editText1); 
    ed2 = (EditText) findViewById(R.id.editText2); 
    ed3 = (EditText) findViewById(R.id.editText3); 
    wb = (WebView) findViewById(R.id.webView1); 
    sp = (Spinner) findViewById(R.id.spinner1); 
    db = new database(LoginActivity.this); 

    // wb.loadUrl(url); 
    List<String> l = db.userlist(); 
    final List<Integer> idlist = db.IDList(); 
    ArrayAdapter<String> sa = new ArrayAdapter<String>(LoginActivity.this, android.R.layout.simple_spinner_item, l); 
    sp.setAdapter(sa); 

    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      user u = new user(); 
      String name = ed1.getText().toString(); 
      String uname = ed2.getText().toString(); 
      String pass = ed3.getText().toString(); 

      if (name.length() > 0 && uname.length() > 0 && pass.length() > 0) { 
       u.setName(name); 
       u.setUname(uname); 
       u.setPass(pass); 

       db.insert(u); 
       ed1.setText(""); 
       ed2.setText(""); 
       ed3.setText(""); 

      } else { 
       Toast.makeText(LoginActivity.this, "Please enter the Name, User Name and password", 
         Toast.LENGTH_SHORT).show(); 
      } 

      Toast.makeText(LoginActivity.this, "The user name details has been saved.", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      // TODO Auto-generated method stub 
      if (idlist.get(position) == position) { 
       details = db.details(position); 
       ed2.setText(details[0]); 
       ed3.setText(details[1]); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 

     } 
    }); 

} 

}

我創建了其它兩個Java文件作爲database.java它創建數據庫,並返回:

public class database extends SQLiteOpenHelper { 

    public static String dbname = "Personal"; 
    public static int version = 1; 
    public static String tblname = "Data"; 
    public static String id = "ID"; 
    public static String name = "Name"; 
    public static String uname = "Username"; 
    public static String pass = "Password"; 

    public database(Context context) { 
     super(context, dbname, null, version); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     String sql1 = "create table " + tblname + " (" + id + " integer primary key autoincrement, " + name + " text, " 
       + uname + " text, " + pass + " text)"; 
     db.execSQL(sql1); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

    } 

    void insert(user u) { 

     SQLiteDatabase db = getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(name, u.getName()); 
     values.put(uname, u.getUname()); 
     values.put(pass, u.getPass()); 

     db.insert(tblname, id, values); 
    } 

    public List<String> userlist() { 
     List<String> list = new ArrayList<String>(); 
     SQLiteDatabase db = getReadableDatabase(); 

     Cursor cursor = db.query(tblname, new String[] { name }, null, null, null, null, null); 

     while (cursor.moveToNext()) { 

      String data = cursor.getString(0); 
      list.add(data); 
      // Log.e("1", data); 
     } 
     return list; 
    } 

    public List<integer> IDList() { 
     List<integer> idlist = new ArrayList<integer>(); 
     SQLiteDatabase db = getReadableDatabase(); 
     Cursor cursor = db.query(tblname, new String[] { id }, null, null, null, null, null); 

     while (cursor.moveToNext()) { 
      String data = cursor.getString(0); 
      idlist.add(Integer.parseInt(data), null); 
     } 
     return idlist; 

    } 

    public String[] details(int position) { 
     String username = null, password=null; 
     SQLiteDatabase db = getReadableDatabase(); 
     Cursor cursor = db.query(tblname, new String[] { id, uname, pass }, null, null, null, null, null); 

     while (cursor.moveToNext()) { 
      if (position == cursor.getInt(0)) { 
       username = cursor.getString(1); 
       password = cursor.getString(2); 
      } else { 
       return null; 
      } 
     } 
     return new String[] {username, password}; 

    } 

} 

和user.java得到和設置細節:

public class user { 

    String id, name, uname, pass; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getUname() { 
     return uname; 
    } 

    public void setUname(String uname) { 
     this.uname = uname; 
    } 

    public String getPass() { 
     return pass; 
    } 

    public void setPass(String pass) { 
     this.pass = pass; 
    } 


} 

我在中收到錯誤文件爲incompatible operand types r.integer and int。這就行了if(idlist.get(position)==position) ----它是在項目選定偵聽器上的微調器上,現在通過將整數更改爲整數來解決該問題。但是這個聲明有些無效。它不能比較整型和整型。任何建議糾正它?

+1

是你的代碼編譯? Normaly'Integer'以大寫'i'開頭,還是不是'java.util.Integer'? – Jens

+0

@Jens - 我猜這是編譯好,android有一個描述int資源的'integer'類。但是,這只是猜測 – 0X0nosugar

+0

由於操作數類型不兼容導致錯誤,但將整數轉換爲整數是有用的。謝謝。 –

回答

1

「整數」確實存在爲nested class of class 'R' 。因此,您的列表被解釋爲數據類型爲R.integer的List,但'R.integer'和原始數據類型'int'不兼容。

作爲類的目的「整數」是在需要的時候把整數到對象中,它是不兼容的爲好。

編輯: 所以你要做的第一件事情是要改變每一個「整數」在你的代碼爲「整型」,因爲要與數字打交道,不與Android資源。看看你的崩潰發生的方法,有點難以告訴你需要做什麼來使你的代碼工作(不只是'不崩潰')。

在你的'onItemSelected()方法會給你相應於所選擇的ListView行的名單「L」的索引的「位置」值。

現在你似乎請檢查是否一個用戶名列表索引等於在你的SQLite數據庫的用戶ID。因爲我不知道你的數據模型,所以我不能說這樣做有道理。我只知道你通過單獨的查詢填充了'idlist'和'l'到數據庫中,並且你沒有包含'ORDER BY',所以也許這些名字和ID將不會以相同的方式排序。

但這是另一個問題...... :)

+0

是的,它也不起作用。你能建議正確的做法嗎? –

+0

@ArpitKumar - 好吧,我會試着弄明白。 – 0X0nosugar

0

你必須使用:

List<Integer> list = new ArrayList<Integer>(); 

integerInteger之間的差異。

試着用這個,我希望它能幫助你。

+0

通過將所有整數轉換爲整數做了訣竅,但爲什麼這麼多不同類型的整數如int,整數和整數? –

+0

Integer是一個包裝類,它基本上用於解析,而int則是代碼中常用的數據類型。 –

+0

我不知道你打算用''做什麼,但是你可能會檢查你是否真的需要它。 – Tom

相關問題