小编Raf*_*l T的帖子

将位图保存到文件中并返回具有位图图像的文件

我有一个问题是将位图保存到文件中.我的方法是这样的:

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)

android

17
推荐指数
1
解决办法
5万
查看次数

如何在Fragment中获取对LocationManager的引用

我有一个扩展Fragment的类并实现了LocationListener.当我写作

LocationManager myLocalManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Run Code Online (Sandbox Code Playgroud)

我得到一个编译时错误,因为该方法getSystemService不是Fragment的方法.

我能做些什么来创造LocationManager

android fragment locationmanager

15
推荐指数
1
解决办法
2万
查看次数

为什么Java允许类型不安全的阵列分配?

通常,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数组呢?

java arrays runtime-error declaration type-safety

15
推荐指数
2
解决办法
2527
查看次数

让Gson在错误的类型上抛出异常

我在我的项目中使用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对象,其中foonullbar是0!Gson文档(来自Json)明确指出:

抛出JsonSyntaxException - 如果json不是classOfT类型的对象的有效表示

所以如果我尝试解析第二个响应,我希望得到一个JsonSyntaxException:

Dummy dummy = Gson.fromJson(secondResponse, Dummy.class);
Run Code Online (Sandbox Code Playgroud)

因为Json不代表Dummy对象,而是ErrorHolder对象.

所以我的问题是:有没有办法,Gson以某种方式检测到错误的类型,并抛出一个异常?

java json type-safety gson

15
推荐指数
2
解决办法
2万
查看次数

如何将帧坐标映射到视觉中的叠加

我觉得这个问题已经解决了很多次,但我无法弄清楚.我基本上遵循了关于移动视觉的这个小教程并完成了它.之后我尝试从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)

camera android drawing screen-rotation android-vision

13
推荐指数
0
解决办法
445
查看次数

Android,找不到字符串资源

我正在开发一个应用程序,我收到了错误.我输入了一些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)

我不知道该怎么做,因为我之前从未遇到过这样的问题.请帮我.谢谢大家.

string resources android r.java-file

12
推荐指数
3
解决办法
4万
查看次数

Activity.addContentView(View)== ViewGroup.addContentView(View)?

我对Android活动有疑问:

addContentView(View)当ViewGroup具有(类似的?)addView(View)方法时,Activity具有Method.

不幸的是,它没有记录视图来自哪里addContentView.它LinearLayout只是将视图添加到底部,还是更像是a FrameLayout,它将视图添加到"onTop"?它取决于ViewGroup设定的setContentView

如果我深入了解消息来源,我会看到它addContentView会调用Window抽象方法addContentView.不幸的是我无法看到哪个类正在实现此方法.那么Activitys的行为addContentView到底是什么?

android window view viewgroup android-activity

12
推荐指数
1
解决办法
1万
查看次数

为什么我可以在三元操作中将原始类型设置为null

我一直以为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编译器不会像这样获取废话呢?

java null ternary-operator raw-types

12
推荐指数
1
解决办法
983
查看次数

如何在Parcel中使用writeStringArray()和readStringArray()

我最近在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)

java android marshalling parcel parcelable

11
推荐指数
2
解决办法
8888
查看次数

如何在Android 8.1版本设备上完成活动时阻止屏幕方向更改?

我正在研究一个应用程序,并在8.1设备(Pixel2,Nexus5x)上遇到了一个奇怪的行为,所以我写了一个小应用程序来验证这种行为.

MainActivity被锁定portrait,而模式LandscapeActivity被锁定landscape.MainActivity启动LandscapeActivityfor Result.屏幕切换portraitlandscape预期的.当LandscapeActivity完成它的传播结果MainActivity,而切换回portrait(如预期).

但有时候我会在这里遇到一些错误.之后onActivityResultMainActivity它切换portraitlandscape切换回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

11
推荐指数
1
解决办法
2015
查看次数