2013-05-03 51 views
2

我的應用程序使用cursorloader到sqlite的數據填充到一個ListView。其實,cursorloader應該只填充從數據庫中一列(COLUNM_NAME_SITE)到ListView中。

我是....一旦信息插入到數據庫,創建一個列表項的問題(我可以顯示每一次數據的行線告訴插入),但沒有文字在列表視圖中顯示listview基本上是空白的。我相信這也會讓應用程序崩潰,一旦列表視圖項被點擊。

的logcat的低於但我不知道如何破譯它在說什麼。我已經確定這個問題可能在第98行[loginBundle.putString(「clickedWebSite」,((LoginDetails)clickedObject).getsName());]但不知道如何解決問題。

的logcat:

05-02 15:51:21.573: E/AndroidRuntime(965): FATAL EXCEPTION: main 
05-02 15:51:21.573: E/AndroidRuntime(965): java.lang.ClassCastException: android.content.ContentResolver$CursorWrapperInner cannot be cast to com.loginplus.home.LoginDetails 
05-02 15:51:21.573: E/AndroidRuntime(965): at com.loginplus.home.LoginList.onItemClick(LoginList.java:98) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3180) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.View.dispatchTouchEvent(View.java:5541) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1951) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1712) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726) 
05-02 15:51:21.573: E/AndroidRuntime(965): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1912) 
05-02 15:51:21.573: E/AndroidRuntime(965): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.app.Activity.dispatchTouchEvent(Activity.java:2364) 
05-02 15:51:21.573: E/AndroidRuntime(965): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1860) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.View.dispatchPointerEvent(View.java:5721) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2890) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2466) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:845) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2475) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.os.Looper.loop(Looper.java:137) 
05-02 15:51:21.573: E/AndroidRuntime(965): at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-02 15:51:21.573: E/AndroidRuntime(965): at java.lang.reflect.Method.invokeNative(Native Method) 
05-02 15:51:21.573: E/AndroidRuntime(965): at java.lang.reflect.Method.invoke(Method.java:511) 
05-02 15:51:21.573: E/AndroidRuntime(965): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-02 15:51:21.573: E/AndroidRuntime(965): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-02 15:51:21.573: E/AndroidRuntime(965): at dalvik.system.NativeStart.main(Native Method) 

CursorLoader:

public class LoginList extends FragmentActivity implements AdapterView.OnItemClickListener, OnClickListener, LoaderManager.LoaderCallbacks<Cursor> { 

private ListView loginList; 
private Button webLogin; 
private SimpleCursorAdapter adapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.login_listview); 

loginList = (ListView)findViewById(R.id.loginlist); 
loginList.setOnItemClickListener(this); 

webLogin = (Button)findViewById(R.id.button3); 
webLogin.setOnClickListener(this); 

//Specify fileds to display in the list 
String[] from = new String[] { ListProvider.COLUMN_NAME_SITE }; 

//Bind fields to listview 
int[] to = new int[] {R.id.loginlist }; 

// Create CursorAdapter and set it to display 
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to, 0); 

loginList.setAdapter(adapter); 

getSupportLoaderManager().initLoader(0, null, this); 
} 


@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
// TODO Auto-generated method stub 
Toast.makeText(getApplicationContext(), "Selected ID :" + arg2, Toast.LENGTH_SHORT).show(); 

Intent updateDeleteLoginInfo = new Intent (this, UpdateDeleteLoginList.class); 

Cursor clickedObject = (Cursor)loginList.getItemAtPosition(0); 

Bundle loginBundle = new Bundle(); 
loginBundle.putString("clickedWebSite",((LoginDetails) clickedObject).getsName()); //this is line 98 
loginBundle.putString("clickedWebAddress",((LoginDetails) clickedObject).getwUrl()); 
loginBundle.putString("clickedUserName",((LoginDetails) clickedObject).getuName()); 
loginBundle.putString("clickedPassWord",((LoginDetails) clickedObject).getpWord()); 
loginBundle.putString("clickedNotes",((LoginDetails) clickedObject).getlNotes()); 

updateDeleteLoginInfo.putExtras(loginBundle); 

startActivityForResult(updateDeleteLoginInfo, 0); 
} 

@Override 
public void onClick(View arg0) { 
// TODO Auto-generated method stub 
Intent webLoginIntent = new Intent (this, LoginPlusActivity.class); 
startActivity(webLoginIntent); 
} 

loginDetail類:

public class LoginDetails { 

private int id; 
private String sName; 
private String wUrl; 
private String uName; 
private String pWord; 
private String lNotes; 


// getting ID 
public int getid(){ 
    return id; 
    } 
    // setting id 
    public void setid(int id){ 
    this.id = id; 
    } 

public String getsName() { 
    return sName; 
    } 
    public void setsName(String sName) { 
    this.sName = sName; 
    } 

public String getwUrl() { 
    return wUrl; 
    } 
    public void setwUrl(String wUrl) { 
    this.wUrl = wUrl; 
    } 

public String getuName() { 
    return uName; 
    } 
    public void setuName(String uName) { 
    this.uName = uName; 
    } 

public String getpWord() { 
    return pWord; 
    } 
    public void setpWord(String pWord) { 
    this.pWord = pWord; 
    } 

public String getlNotes() { 
    return lNotes; 
    } 
    public void setlNotes(String lNotes) { 
    this.lNotes = lNotes; 
    } 
} 

回答

3

我知道這是一個老問題,我只能回答,因爲這似乎是在谷歌唯一的結果..

你不能投了光標的對象。 CursorWrapperInner來自使用一個CursorLoader,並且(從我能告訴的)代理對象到加載器的實際Cursor。你將不得不通過類似靜態方法的光標實例化你的對象,該方法接受光標並返回對象。

例如:

public class LoginDetails { 

private int id; 
private String sName; 
private String wUrl; 
private String uName; 
private String pWord; 
private String lNotes; 

public static LoginDetails newInstance(Cursor c){ 
    LoginDetails ld = new LoginDetails() 
    int _id = c.getInt(c.getColumnIndex("id")); 
    ... 
    ld.setId(_id); 
    return ld; 
} 
.... 

} 

,然後在你的ListView

@Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     Cursor c = (Cursor)adapter.getItem(position); 
     LoginDetails loginDetails = LoginDetails.newInstance(c); 
     ... 
    } 
相關問題