我有一个问题是将位图保存到文件中.我的方法是这样的:
private File savebitmap(Bitmap bmp) {
String extStorageDirectory = Environment.getExternalStorageDirectory()
.toString();
OutputStream outStream = null;
File file = new File(bmp + ".png");
if (file.exists()) {
file.delete();
file = new File(extStorageDirectory, bmp + ".png");
Log.e("file exist", "" + file + ",Bitmap= " + bmp);
}
try {
outStream = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Log.e("file", "" + file);
return file;
}
Run Code Online (Sandbox Code Playgroud)
它给了我file的错误.我这样调用这个方法:
Drawable d = iv.getDrawable();
Bitmap bitmap = ((BitmapDrawable) d).getBitmap();
File …Run Code Online (Sandbox Code Playgroud) 我有一个扩展Fragment的类并实现了LocationListener.当我写作
LocationManager myLocalManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Run Code Online (Sandbox Code Playgroud)
我得到一个编译时错误,因为该方法getSystemService不是Fragment的方法.
我能做些什么来创造LocationManager?
通常,Java可以被视为类型安全的语言.我知道泛型有一些缺陷,但我最近遇到了一个前所未有的问题.要打破它:
Object[] objects = new Integer[10];
objects[0] = "Hello World";
Run Code Online (Sandbox Code Playgroud)
不会导致预期的编译时错误.我会假设一个数组的声明Object将不允许指向一个其他的数组.在泛型中,我不允许做出如下奇怪的事情:
ArrayList<Object> objs = new ArrayList<Integer>
Run Code Online (Sandbox Code Playgroud)
如果我试图欺骗Java做一些事情
ArrayList<? extends Object> objects = new ArrayList<Integer>
Run Code Online (Sandbox Code Playgroud)
我被允许声明它,但我只能添加类型的对象null.
为什么Java不会阻止声明这样的weired数组呢?
我在我的项目中使用Gson将JSON-Strings反序列化为Java-Objects.如果我提出请求,我希望服务器有明确定义的响应.服务器将返回我期望的明确定义的响应,或者它将返回一个(也定义的)错误对象.
为了清楚起见:假设我有一个像这样的简单对象:
class Dummy{
private String foo;
private int bar;
}
Run Code Online (Sandbox Code Playgroud)
和像这样的错误对象:
class ErrorHolder{
private RequestError error;
}
class RequestError{
private String publicMsg;
private String msg;
}
Run Code Online (Sandbox Code Playgroud)
如果我得到像服务器响应
{"foo":"Hello World", "bar":3 }
一切都按预期工作.
但如果回应是这样的话
{"error":{"publicMsg":"Something bad happened", msg:"you forgot requesting some parameter"}}
我会得到一个种类的Dummy对象,其中foo是null和bar是0!Gson文档(来自Json)明确指出:
抛出JsonSyntaxException - 如果json不是classOfT类型的对象的有效表示
所以如果我尝试解析第二个响应,我希望得到一个JsonSyntaxException:
Dummy dummy = Gson.fromJson(secondResponse, Dummy.class);
Run Code Online (Sandbox Code Playgroud)
因为Json不代表Dummy对象,而是ErrorHolder对象.
所以我的问题是:有没有办法,Gson以某种方式检测到错误的类型,并抛出一个异常?
我觉得这个问题已经解决了很多次,但我无法弄清楚.我基本上遵循了关于移动视觉的这个小教程并完成了它.之后我尝试从ColorBlob开始检测对象并绘制边框.
想法是从框架的中间开始(有目的地将对象保持在相机的中间)并通过其颜色检测该对象的边缘.只要我以横向模式(Frame.ROTATION_0)保持手机,它就可以正常工作.一旦我处于纵向模式(Frame.Rotation_90),边界Rect就会被绘制成旋转,因此具有更多高度的对象将被绘制为具有更多宽度,并且还有点偏离.
该文档说,探测器总是提供给COORDS未旋转直立框架,所以我怎么来计算相对于它的旋转边框COORDS?我认为这不重要,但这是我如何找到颜色Rect
public Rect getBounds(Frame frame){
int w = frame.getMetadata().getWidth();
int h = frame.getMetadata().getHeight();
int scale = 50;
int scaleX = w / scale;
int scaleY = h / scale;
int midX = w / 2;
int midY = h / 2;
float ratio = 10.0
Rect mBoundary = new Rect();
float[] hsv = new float[3];
Bitmap bmp = frame.getBitmap();
int px = bmp.getPixel(midX, midY);
Color.colorToHSV(px, hsv);
Log.d(TAG, "detect: mid hsv: " + hsv[0] …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我收到了错误.我输入了一些String资源res/values/strings并保存了它.现在如果我想在Activity中访问它,我会收到这样的错误
07-13 11:16:20.050: ERROR/AndroidRuntime(5883): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f060006
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚原因.资源看起来像这样:
<string name="dialog_download_text">please wait while downloading</string>
Run Code Online (Sandbox Code Playgroud)
我想像访问它一样
public void onCreate(Bundle b){
super.onCreate(b);
String s = getResources().getString(R.string.dialog_download_text);
}
Run Code Online (Sandbox Code Playgroud)
我也查看了R.java并找到了我的条目
public static final class string {
public static final int dialog_download_cancel=0x7f060005;
public static final int dialog_download_text=0x7f060007;
public static final int dialog_download_title=0x7f060006;
}
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做,因为我之前从未遇到过这样的问题.请帮我.谢谢大家.
我对Android活动有疑问:
addContentView(View)当ViewGroup具有(类似的?)addView(View)方法时,Activity具有Method.
不幸的是,它没有记录视图来自哪里addContentView.它LinearLayout只是将视图添加到底部,还是更像是a FrameLayout,它将视图添加到"onTop"?它取决于ViewGroup设定的setContentView?
如果我深入了解消息来源,我会看到它addContentView会调用Window抽象方法addContentView.不幸的是我无法看到哪个类正在实现此方法.那么Activitys的行为addContentView到底是什么?
我一直以为Java中的原始类型不可能null,因为如果我尝试这样做,这是一个编译时错误:
int test = null;
Run Code Online (Sandbox Code Playgroud)
但是在三元操作中,似乎允许:
int test = something != 0 ? 5 : null;
Run Code Online (Sandbox Code Playgroud)
不是三元操作(在这种情况下):
int test;
if (something != 0){
test = 5;
} else {
test = null
}
Run Code Online (Sandbox Code Playgroud)
这当然不应该被允许.如果该条件失败,它将自动抛出一个NullPointerException由于自动装箱.那么为什么java编译器不会像这样获取废话呢?
我最近在Androids Parcel类中遇到了一个非常愚蠢的(至少从我的观点来看)实现.
假设我有一个像这样的简单类
class Foo implements Parcelable{
private String[] bars;
//other members
public in describeContents(){
return 0;
}
public void writeToParcel(Parcel dest, int flags){
dest.writeStringArray(bars);
//parcel others
}
private Foo(Parcel source){
source.readStringArray(bars);
//unparcel other members
}
public static final Parcelable.Creator<Foo> CREATOR = new Parcelable.Creator<Foo>(){
public Foo createFromParcel(Parcel source){
return new Foo(source);
}
public Foo[] newArray(int size){
return new Foo[size];
}
};
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想要Parcel一个Foo对象并且bars为null,我认为无法从这种情况中恢复(当然是捕获异常的例子).以下是Parcel中这两种方法的实现:
public final void writeStringArray(String[] val) {
if (val != null) {
int …Run Code Online (Sandbox Code Playgroud) 我正在研究一个应用程序,并在8.1设备(Pixel2,Nexus5x)上遇到了一个奇怪的行为,所以我写了一个小应用程序来验证这种行为.
MainActivity被锁定portrait,而模式LandscapeActivity被锁定landscape.MainActivity启动LandscapeActivityfor Result.屏幕切换portrait到landscape预期的.当LandscapeActivity完成它的传播结果MainActivity,而切换回portrait(如预期).
但有时候我会在这里遇到一些错误.之后onActivityResult在MainActivity它切换portrait到landscape切换回portrait立即.虽然我可以处理这个州,但它仍然看起来很讨厌.
为了可追溯性,我将发布所有内容以重建它.
我该怎么做才能防止它?另请注意,每次都不会发生这种情况,并且只能在8.1设备上进行测试.它似乎在8.1以下的Android设备上
编辑:
添加android:configChanges="orientation|screenSize"到我的清单@Floern建议他的答案没有成功.对平台错误的确认也是可接受的答案
表现
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LandscapeActivity"
android:screenOrientation="landscape"/>
</application>
Run Code Online (Sandbox Code Playgroud)
主要活动
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName(); …Run Code Online (Sandbox Code Playgroud) android screen-orientation google-nexus google-pixel android-8.1-oreo
android ×7
java ×4
type-safety ×2
arrays ×1
camera ×1
declaration ×1
drawing ×1
fragment ×1
google-nexus ×1
google-pixel ×1
gson ×1
json ×1
marshalling ×1
null ×1
parcel ×1
parcelable ×1
r.java-file ×1
raw-types ×1
resources ×1
string ×1
view ×1
viewgroup ×1
window ×1