所以,我一直在关注朋友发给我的这个Vogella ContentProvider教程,如果你看一下第 6.3 节的结尾,你会看到他说:
如果您运行此应用程序,数据将从 People 应用程序的ContentProvider读取并显示在TextView中。通常,您会在ListView中显示此类数据。
由于我是使用 android(以及一般编程)的新手,我只是将 main.xml 中的 TextView 标记更改为 ListView,并且正如预期的那样,当我在模拟器中运行应用程序时,它崩溃了。
按需代码:
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/contactview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Java 文件:
package de.vogella.android.contentprovider;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;
public class ContactsActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
TextView contactView = (TextView) findViewById(R.id.contactview);
Cursor cursor = getContacts();
while (cursor.moveToNext()) {
String displayName = cursor.getString(cursor
.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
contactView.append("Name: ");
contactView.append(displayName);
contactView.append("\n");
}
}
private Cursor getContacts() {
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME };
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
+ ("1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
}
}
我确定我做错了什么,有人可以指出我正确的方向或告诉我如何将它从 TextView 切换到 ListView?
此外,这无关紧要,但我下载了 adt 包,有时它无法正确生成 R.java 文件,它不会对 R.java 文件进行任何更改,并将其保留为默认生成的文件你做了任何新的android项目,有什么想法吗?
注意:您不必回答此问题即可让您的答案被接受。