String[] m_cPackageName;
int m_size;
int j=0;
List<ApplicationInfo> installedList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
m_size = installedList.size();
m_cPackageName=new String[m_size];
for (PackageInfo pi : pkginfoList) {
try {
m_appinfo = packageManager.getApplicationInfo(pi.packageName, 0);
if ((m_appinfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
// equal to zoo means system apps, not equal is third party installed apps
m_cPackageName[j]=pi.packageName;
j++;
}
} catch (NameNotFoundException e) {
Log.d(getClass().getSimpleName(), "Name not found", e);
}
这里我得到的installedList的总大小是56..在数组中填充值后,它显示为空值。我怎样才能消除空值..任何人帮助我..
输出:
m_cPackageName=String[56];
m_cPackageName[0]="Myvalue"
m_cPackageName[1]="null"
m_cPackageName[2]="null"
.
.
.
m_cPackageName[55]="null"
最佳答案
添加到数组(大小为 m_size
)的元素少于 m_size
,这会导致末尾出现未分配的 null
元素。
这是因为 j
有时只会增加 - 在条件条件内 ((m_appinfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0
) ,并且仅当未抛出并捕获异常时。
一个简单的解决方案是使用 ArrayList ,然后仅添加“已批准”元素。由于 List/ArrayList 按需增长,因此不存在固定大小数组中可能存在的尾随 null(未分配)元素。
// List, not array
List<String> m_cPackageName = new ArrayList<String>();
// ..
if ((m_appinfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
// Only added to list sometimes, but m_cPackageName.size() is
// always the count of elements that HAVE been added.
m_cPackageName.add(pi.packageName);
}
// Then, if you really need an array, which will now be the proper size
// and not contain null elements because the size is computed based on the
// accepted elements in m_cPackageName which is m_cPackageName.size() ..
String[] arrayOfPackageNames = m_cPackageName.toArray(new String[0]);
关于java - 如何避免java中字符串数组中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22088909/