首先请参阅Android开发人员指南中的以下引用:
枚举通常需要的内存是静态常量的两倍多.你应该严格避免在Android上使用枚举.
Java中的每个类(包括匿名内部类)都使用大约500个字节的代码. https://developer.android.com/training/articles/memory.html
尽管在第一个要点"严格避免在Android上使用枚举"中发出了不祥的警告,但在这一点上所说的实际上听起来并不是那么糟糕.常量是32位整数,枚举可能是64位引用.在那里给出的关于枚举价格贵两倍的数学是有道理的,而且看起来并不那么可怕.
我担心的是,警告可能部分取决于第二个要点.
我想知道一个简单的枚举"类"声明是否带有500字节的开销?eacn enum类型怎么样?
似乎很有道理,类型可以是"扩展类",因为它们可以采用自己的方法,而不仅仅是实例.要将它短语作为一个问题,如果我的枚举是Color,并且我有20种颜色枚举类型(例如红色,蓝色,绿色......),那么每种类型是500个字节吗?
您如何从IO异常中检测404.我可以只搜索错误消息"404",但这是正确的方法吗?有什么更直接的吗?
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.Drive.Files.Update;
import com.google.api.services.drive.Drive;
File result = null;
try {
update = drive.files().update(driveId, file , mediaContent);
update.setNewRevision(true);
result = update.execute();
} catch (IOException e) {
Log.e(TAG, "file update exception, statusCode: " + update.getLastStatusCode());
Log.e(TAG, "file update exception, e: " + e.getMessage());
}
Log.e(TAG, "file update exception, statuscode " + update.getLastStatusCode());
03-03 05:04:31.738: E/System.out(31733): file update exception, statusCode: -1
03-03 05:04:31.738: E/System.out(31733): file update exception, e: 404 Not Found
03-03 05:04:31.738: E/System.out(31733): "message": "File not found: FileIdRemoved",
Run Code Online (Sandbox Code Playgroud)
答:以下Aegan的评论是正确的,事实证明你可以将异常子类化为GoogleJsonResponseException并从那里获取状态代码.在这种情况下,答案最终取决于我使用的是GoogleClient,它生成包含状态代码的IO …
我使用ViewPager和PagerSlidingTabStrip,我有3个片段,每个片段都有自己的自定义监听器.在每个片段中,我都覆盖了Destroy,Pause方法,但不幸的是,当我从一个片段移动到另一个片段时,我必须删除一个片段的监听器,但是由于片段保留在内存中,因此不会调用上述方法.这些方法仅在我移动到另一个Activity时调用.因此,任何身体都可以告诉我如何知道片段是否会变得不可见,以便我可以删除监听器,否则这些监听器将会干扰我所有片段的数据.
我正在尝试在我的项目中实现com.google.android.gms.common.api.GoogleApiClient.
问题是每次我尝试连接时,我都会使用我执行的待定意图将onConnectionFailed监听器调用回来.在全新安装中,第一个待处理的意图将启动帐户选择屏幕.这是预料之中的.除非在应用程序管理器中清除应用程序的数据,否则每次后续重新启动应用程序都将绕过帐户选择.
在帐户选择屏幕之后,登录屏幕将显得简洁.它永远不会签到.登录屏幕闪烁后将调用onActivityResult,尝试连接客户端.它没有连接,并再次调用onConnectionFailed侦听器.
如果我继续尝试执行意图,我会陷入循环,屏幕显示正好出现,然后消失,但从未连接或登录.ConnectionResult.toString表示"Sign_In_Required",并返回错误代码4(与Sign_In_Required常量相同.
在API控制台上,我实现了一个Ouath 2.0客户端ID,以及一个用于Android应用程序的公共API访问密钥.值得注意的是,我的应用程序使用较旧的com.google.api.services.drive.Drive客户端.
至于我的代码:
我试过在这里和这里使用两种不同的实现.我尝试实现第二个示例,尽可能少地进行更改.它转载如下:
public class MainActivity extends Activity implements ConnectionCallbacks,
OnConnectionFailedListener {
private static final String TAG = "android-drive-quickstart";
private static final int REQUEST_CODE_CAPTURE_IMAGE = 1;
private static final int REQUEST_CODE_CREATOR = 2;
private static final int REQUEST_CODE_RESOLUTION = 3;
private GoogleApiClient mGoogleApiClient;
private Bitmap mBitmapToSave;
/**
* Create a new file and save it to Drive.
*/
private void saveFileToDrive() {
// Start by creating a new contents, and setting …Run Code Online (Sandbox Code Playgroud) 阅读几个SO帖子(例如此处),提示Google Drive文件可以包含多个父文件,即多个文件夹中的相同文件.我想测试一下,因为我正在集思广益,为我的Android应用程序备份文件集合,而不必在每个备份上重新加载整个集合.
不幸的是,当我在下面设置文件元数据时,该文件不会上传到任一父文件夹.当我评论其中一位父母时,它会上传并显示.
因此,我认为设置多个父项的功能是为"垃圾"或"收藏夹"等特殊文件夹保留的.或者我是否需要在初始创建后尝试更新文件?
List<ParentReference> parents = new ArrayList<ParentReference>();
parents.add(new ParentReference().setId(parentId1));
parents.add(new ParentReference().setId(parentId2));
static private File create_File(String fileName, List<ParentReference> parents){
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("db");
System.out.println("Mimetype " + mimeType);
// File's metadata.
File file = new File();
file.setMimeType(mimeType);
file.setTitle(fileName);
file.setParents(parents);
return file;
}
Run Code Online (Sandbox Code Playgroud) 在使用StartActivityForResult之前,我试图将某些数据附加到intent上.
当intent在OnActivityForResult中返回时,我想访问我在intent中附加的数据.因此,我可以将意图中检索到的数据与数据库条目,容器ID等相关联.
不幸的是,返回的意图似乎与我开始的意图不同.我尝试在测试用例中比较(==)旧的和新的意图,结果失败,并且毫不奇怪,我尝试追加的数据不存在.是否有任何关于原始意图的链接?
我尝试过的基本想法:
伪造代码中的StartActivityForResult代码:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
i.putExtra([-Key-], [int]);
i.putExtra([-Key-], [int]);
....
getParentFragment().startActivityForResult(i, requestCode);
Run Code Online (Sandbox Code Playgroud)
OnActivityResult的伪代码
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
....
switch(requestcode){
case RESULT_LOAD_IMAGE :
//These always evaluate to default. The intent returns with the picture,
//and I process it fine (with default values), but any extra data i try to append
//to the intent is lost.
int rowId = intent.getIntExtra([-Key-], [-def_value-]);
....
....
break;
default:
throw new RuntimeException();
}
}
Run Code Online (Sandbox Code Playgroud) 在android的数据绑定语法中,无论如何都无需对表达式进行两次计算就可以对表达式的结果进行嵌套三元:
对于单一三元情况,我有以下几点:
android:textColor="@{stock.mStockDelta.compareTo(BigDecimal.ZERO) < 0 ?
@color/red : @color/green}"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以仅使用xml为三个compareTo结果{-1,0,1}中的每一个设置颜色?