我有一点时间通过Intent/ Bundles 搞清楚我的方法会有什么数据.我已经尝试添加断点来检查数据,但我没有看到任何东西.也许是因为Parcelable我无法在Eclipse中手动读取它.
例如,a onActivityResult(int requestCode, int resultCode, Intent data)表示a Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI).我如何知道可用的数据?请注意,我不是要求提供哪些数据,但我是如何理解的,所以我可以将相同的想法应用于任何Bundle/ Intent来自Android框架?也许这看起来像文档一样简单,但我没有看到完整的数据列表,我在Eclipse中看不到它.所以我迷路了.
我正在重新开始研究我之前工作的应用程序,当时我已经围绕Android 2.2 Froyo构建了所有内容.
我已经更新了我的SDK以获取最新的API,并注意到我使用的ClipboardManager功能已被弃用.我更新了代码以使用较新的ClipData模型并在我的Froyo手机上试用了它,当然,我在新代码中得到了一个NoClassDefFoundError.
我已经浏览了一下,并没有找到任何关于保持向后兼容性的一般策略的真实讨论.
我不完全确定我应该如何处理这个以及API不同的其他情况,因为我希望所有版本的用户都能够使用我的应用程序.
我应该按如下方式进行检查吗?
if(version == old){
use old API;
} else {
use new API;
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,我已经弃用了我的类中的代码,Eclipse将永远发出警告.
另一方面,我可以构建一个旧版本的API,并希望新版本可以正常处理它.但是当有更好的替代方案时,我冒着构建有缺陷或低性能代码的风险.
处理这个问题的最佳方法是什么?
我目前正在尝试学习如何使用Loaders,并且在我的活动中无法启动Loader.
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
public class ASwitchActivity extends Activity implements
LoaderManager.LoaderCallbacks<SampleLoader.SampleLoaderResult> {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getLoaderManager().initLoader(0, null, this);
}
public Loader<SampleLoader.SampleLoaderResult> onCreateLoader(int id, Bundle args) {
return new SampleLoader(getBaseContext(), account, "dog");
}
public void onLoadFinished(Loader<SampleLoader.SampleLoaderResult> loader, SampleLoader.SampleLoaderResult out)
{
TextView t=(TextView)findViewById(R.id.testTV);
t.setText("yay");
}
public void onLoaderReset(Loader<SampleLoader.SampleLoaderResult> loader){
}
}
Run Code Online (Sandbox Code Playgroud)
但是Eclipse给出了一个错误说明:
LoaderManager类型中的方法initLoader(int,Bundle,LoaderManager.LoaderCallbacks)不适用于参数(int,null,ActivitySwitchActivity)
任何人都可以帮我解决问题吗?
我正在使用旧的Contacts API来选择带有电话号码的联系人.我想使用较新的ContactsContracts API.我想要...
ContactsContracts非常复杂.我找到了许多例子,但没有一个符合我的需求.我不想选择联系人然后查询联系人的详细信息,因为这会给我一个他们的电话号码列表.我需要用户选择其中一个联系人的电话号码.我不想编写自己的对话框来显示联系人或让用户选择一个电话号码.有什么简单的方法可以得到我想要的东西吗?
这是我正在使用的旧API代码:
static public final int CONTACT = 0;
...
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.Phones.CONTENT_URI);
startActivityForResult(intent, CONTACT);
...
public void onActivityResult (int requestCode, int resultCode, Intent intent) {
if (resultCode != Activity.RESULT_OK || requestCode != CONTACT) return;
Cursor c = managedQuery(intent.getData(), null, null, null, null);
if (c.moveToFirst()) {
String phone = c.getString(c.getColumnIndexOrThrow(Contacts.Phones.NUMBER));
// yay
}
}
Run Code Online (Sandbox Code Playgroud) 我正在关注这些链接以获取我的应用程序中的联系人
http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/
我可以在手机上显示联系人列表
-
我想在每个联系人处添加一个复选框,以便用户可以选择多个联系人,通过单击完成按钮,他应该能够获得他选择的所有联系人
另外,我想获取联系人姓名以及联系电话号码,请参阅我的代码:
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c
.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
Log.v("name", name +" "+number);
// TODO Whatever you want to do with the selected contact
// name.
}
}
在log cat上它显示输出为:
01-09 12:46:41.688: V/name(699): Xyz 1
Run Code Online (Sandbox Code Playgroud)
这是联系人的名字是xyz,它至少有一个与之关联的电话号码.请帮助我如何获得与该联系人相关的号码.
编辑:
如果我String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER));在代码中使用this()行,我会得到以下异常:
01-09 13:33:23.008: E/AndroidRuntime(786): FATAL EXCEPTION: main
01-09 13:33:23.008: E/AndroidRuntime(786): java.lang.RuntimeException: …Run Code Online (Sandbox Code Playgroud) 我有一个自定义列表视图,我需要以字母顺序显示联系人,你可以提供示例代码,我该如何实现这一目标?
我的活动包含此代码以获取SD卡上的所有图像:
String[] projection = {MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.ImageColumns.DATA};
Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null,
MediaStore.Images.Media._ID);
int count = cursor.getCount();
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
int i;
for(i = 0; i < count; i++) {
cursor.moveToPosition(i);
String p = cursor.getString(image_path_index);
fd.addToPhonePhoto(p);
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
活动恢复时发生的事件:
03-14 14:06:48.380:E/AndroidRuntime(20793):java.lang.RuntimeException:无法恢复活动{}:java.lang.RuntimeException:无法恢复活动{}:android.database.StaleDataException:Attempted to关闭后访问游标.
它只发生在Android 4.0上.如果在Android 2.x或3.x上,它可以正常工作.但是,如果我更改了在"开发者选项"中选择"不保留活动"选项的系统设置.错误未显示.
我想修改我的代码以避免此错误而不更改系统设置.我该怎么办?
这很奇怪.我在某些设备上看到此崩溃报告:
android.content.ActivityNotFoundException:
No Activity found to handle Intent {
act=android.intent.action.PICK dat=content://com.android.contacts/contacts }
Run Code Online (Sandbox Code Playgroud)
产生此错误的意图是:
Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI); // pre-Eclair
Run Code Online (Sandbox Code Playgroud)
要么:
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); // post-Eclair
Run Code Online (Sandbox Code Playgroud)
该设备只是报告为"Droid",但我不知道操作系统版本.
android ×10
alphabetical ×1
android-4.0-ice-cream-sandwich ×1
bundle ×1
contacts ×1
cursor ×1
deprecated ×1