2013-07-03 2 views
0

나는 새로운 안드로이드 개발자입니다. 나는 내 프로젝트를 계속하지 않는 이유에서 큰 문제가있다. 연락처 정보를 얻고 싶다면이 정보를 sqlite로 설정하고 싶습니다. 이 단계는 작동하지만 내가 listview 목록에 일을하려고 할 때 여기 내 코드는 내가 도와 줄 수 있습니까? 안드로이드 간단한 데이터베이스 어댑터가 작동하지 않습니다

이 내 활동 레이아웃

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

<ListView 
    android:id="@id/android:list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 
</ListView> 

</LinearLayout> 

이 내 SQLite는 코드

package com.example.myprojects; 

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


public class contacts_nick { 

//private static final String TAG = contacts_nick.class.getSimpleName(); 

public static final String KEY_ID="id"; 
public static final String KEY_NAME="name"; 
public static final String KEY_PHONE="phone"; 
public static final String KEY_NICK="nick"; 

private static final String DATABASE_NAME="mydatabase"; 
private static final String DATABASE_TABLE="Contacts"; 
private static final int DATABASE_VERSION=1; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 

private static class DbHelper extends SQLiteOpenHelper{ 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    //To create db 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " +DATABASE_TABLE+ " (" +KEY_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "+KEY_NAME+" TEXT, "+KEY_PHONE+" TEXT, "+KEY_NICK+" TEXT);"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 

    } 

} 



public contacts_nick(Context c){ 
    ourContext=c; 
} 

public contacts_nick open() throws SQLException{ 
    ourHelper=new DbHelper(ourContext); 
    ourDatabase=ourHelper.getWritableDatabase(); 
    return this; 

} 

public void close(){ 
    ourHelper.close(); 
} 

public long insert (String displayName, String phoneNumber) throws SQLException { 

    ContentValues cv=new ContentValues(); 
    cv.put(KEY_NAME, displayName); 
    cv.put(KEY_PHONE, phoneNumber);  
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 

} 

public String getData() throws SQLException { 

    // TODO Auto-generated method stub 
    String[] columns =new String[]{KEY_ID,KEY_NAME,KEY_PHONE}; 
    Cursor c=ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
    String result=""; 

    int id=c.getColumnIndex(KEY_ID); 
    int name=c.getColumnIndex(KEY_NAME); 
    int phone=c.getColumnIndex(KEY_PHONE); 

    for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ 
     result=result+c.getString(id)+","+c.getString(name)+" "+c.getString(phone)+"\n"; 
    } 
    return result; 
} 

public String search(int l) throws SQLException{ 

    String[] columns =new String[]{KEY_ID,KEY_NAME,KEY_PHONE}; 
    Cursor c=ourDatabase.query(DATABASE_TABLE, columns,KEY_ID +"="+l, null, null, null, null); 
    if(c!=null){ 
     c.moveToFirst(); 
     String name=c.getString(1); 
     return name; 

    } 
    return null; 
} 

public int getrowcount(String name,String phone){ 
    int result; 
    String[] columns =new String[]{KEY_ID,KEY_NAME,KEY_PHONE}; 
    Cursor c=ourDatabase.query(DATABASE_TABLE, columns,KEY_NAME +"="+"'"+name+"'"+" AND "+KEY_PHONE+"="+ "'"+phone+"'", null, null, null, null); 

    result=c.getCount(); 
    return result; 

} 

public void update(long id, String name, String phone) throws SQLException{ 

    ContentValues cvUpdate=new ContentValues(); 
    cvUpdate.put(KEY_ID,id); 
    cvUpdate.put(KEY_NAME,name); 
    cvUpdate.put(KEY_PHONE,phone); 
    ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ID+"="+id, null); 
} 

public void delete(long l) throws SQLException{ 

    ourDatabase.delete(DATABASE_TABLE, KEY_ID+"="+l, null); 
} 

public Cursor getAllData() { 
    ourDatabase=ourHelper.getReadableDatabase(); 
    String[] columns =new String[]{KEY_ID,KEY_NAME,KEY_PHONE}; 
    Cursor cur=ourDatabase.query(DATABASE_TABLE,columns, null,null, null, null, null); 
    return cur; 
} 
} 

입니다 내 행 레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="#FFDAFF7F" 
android:padding="8dp"> 
<LinearLayout android:id="@+id/Text" 
android:orientation="vertical" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:paddingLeft="10dip"> 
<TextView 
android:id="@+id/name" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textColor="#FF7F3300" 
android:textSize="20dip" 
android:textStyle="italic" 
/> 
<TextView 
android:id="@+id/phone" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textSize="14dip" 
android:textColor="#FF267F00" 
android:paddingLeft="100dip" 
/> 
</LinearLayout> 

</RelativeLayout > 

이며,이 내 main_activity

입니다 617,451,515,
package com.example.myprojects; 

import android.app.Dialog; 
import android.app.ListActivity; 
    import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
    import android.widget.TextView; 

public class edit_contacts extends ListActivity { 

cursor customadapter; 
TextView contactView; 
TextView s1; 
ListView list; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_edit); 

    contactView = (TextView) findViewById(R.id.textView1); 
    s1=(TextView)findViewById(R.id.textView2); 
    list=(ListView)findViewById(android.R.id.list); 

    boolean diditwork=true; 
    try{ 
    Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
    while (cursor.moveToNext()) { 
      String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      contacts_nick entry=new contacts_nick(this); 
      entry.open(); 
      if(entry.getrowcount(displayName,phoneNumber)==0){ 
       entry.insert(displayName,phoneNumber); 
       entry.close(); 
      } 
      else{ 
       Dialog d=new Dialog(this); 
       d.setTitle("Error"); 
       TextView tv=new TextView(this); 
       tv.setText("KAYIT VAR"); 
       d.setContentView(tv); 
       d.show(); 
       entry.close(); 
      } 
    } 
    } 
    catch(Exception e){ 
     diditwork=false; 
     String error =e.toString(); 
     Dialog d=new Dialog(this); 
     d.setTitle("Sorun Var"); 
     TextView tv=new TextView(this); 
     tv.setText(error); 
     d.setContentView(tv); 
     d.show(); 
    } 
    finally{ 
     if(diditwork){ 
      Dialog d=new Dialog(this); 
      d.setTitle("Tebrikler"); 
      TextView tv=new TextView(this); 
      tv.setText("Başaralı"); 
      d.setContentView(tv); 
      d.show(); 
     } 
    } 
    contacts_nick info=new contacts_nick(this); 

    Cursor c = info.getAllData(); 
    String[] columns = new String[] { contacts_nick.KEY_ID, contacts_nick.KEY_NAME,contacts_nick.KEY_PHONE }; 
    int[] to = new int[] { R.id.name, R.id.phone }; 

    //@SuppressWarnings("deprecation") 
    ListAdapter simpCurAdap = new SimpleCursorAdapter(this, R.layout.activity_row, c, columns, to,0); 
    setListAdapter(simpCurAdap); 


    } 


} 
+0

로그 캣에서 오류 세부 정보를 추가하십시오 –

답변

0

String[] columns = new String[] { contacts_nick.KEY_ID, contacts_nick.KEY_NAME,contacts_nick.KEY_PHONE }; int[] to = new int[] { R.id.name, R.id.phone };

세 가지 변수 만 위에 두 개의보기를 매핑한다.

+0

예 내가 발견하고 그것을 작성하고 다시 작동하지 않습니다 : ( –

+0

logcat을 사용하여 게시물을 편집하십시오. 그렇지 않으면 추측 게임입니다. –

0

이 오류가 될 수있다 참조이 llink이

contacts_nick entry=new contacts_nick(this); 
       entry.open(); 

    Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 

     while (cursor.moveToNext()) { 
       String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
       String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

       if(entry.getrowcount(displayName,phoneNumber)==0){ 
        entry.insert(displayName,phoneNumber); 
       } 
       else{ 
//this code be running main activity send to onpause state.so you do better way 
        Dialog d=new Dialog(this); 
        d.setTitle("Error"); 
        TextView tv=new TextView(this); 
        tv.setText("KAYIT VAR"); 
        d.setContentView(tv); 
        d.show(); 

       } 
     } 

     } 
     catch(Exception e){ 
//this code be running main activity send to onpause state.so you do better way 
      diditwork=false; 
      String error =e.toString(); 
      Dialog d=new Dialog(this); 
      d.setTitle("Sorun Var"); 
      TextView tv=new TextView(this); 
      tv.setText(error); 
      d.setContentView(tv); 
      d.show(); 
     } 
     finally{ 
      if(diditwork){ 
//this code be running main activity send to onpause state.so you do better way 
       Dialog d=new Dialog(this); 
       d.setTitle("Tebrikler"); 
       TextView tv=new TextView(this); 
       tv.setText("Başaralı"); 
       d.setContentView(tv); 
       d.show(); 
      } 
     } 

//use global objects,and you didnot call open method so didnot get value,that is problem i think 

     Cursor c = entry.getAllData(); 
     String[] columns = new String[] { contacts_nick.KEY_ID, contacts_nick.KEY_NAME,contacts_nick.KEY_PHONE }; 
     int[] to = new int[] { R.id.name, R.id.phone }; 

     //@SuppressWarnings("deprecation") 
     ListAdapter simpCurAdap = new SimpleCursorAdapter(this, R.layout.activity_row, c, columns, to,0); 
     setListAdapter(simpCurAdap); 


     } 

@override 
Public onStop(){ 
super.onStop() 

//close finally 
if(entry!=null) 
     entry.close(); 
} 

을 시도

:

http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

+0

고맙습니다 문제가 해결되었습니다 –

+0

좋아 .. 당신은 위의 동일한 형식이나 새로운 사용합니까? –

관련 문제