小编Raf*_*l T的帖子

TextView setGravity()在java中不起作用

我遇到了问题我不知道是什么原因造成的.我有一个非常简单的布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
    android:id="@+id/my_text_view"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_gravity="NOTE_THIS"
    android:textColor="#FFFFFF"
    android:textSize="22dp"
    android:text="TestText"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

它包含在另一个布局中.如果我改变xml内部的重力,我会在Layout-Editor和手机上看到相同的结果.如果我想以编程方式应用Gravity,myTextView.setGravity(Gravity.CENTER)那就不会改变任何东西.我不能在TextView上用Java设置LayoutGravity

我会尝试将调试目的包括在内,每次使用另一个重力,它甚至可以工作.所以我认为我的布局一切都没问题,并且必须有一个Bug或其他我想念的东西.有人可以给我一个提示,我也可以尝试,或者是什么原因导致这个问题?

java android bug-tracking gravity android-layout

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

未经许可阅读联系人?

我想通过Contacts Picker这样的方式阅读Contacts :

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
startActivityForResult(contact, CONTACT_PICK_CODE);
Run Code Online (Sandbox Code Playgroud)

如果我得到结果,则intent.getData()包含uri查找联系人的内容,但我需要获得READ_CONTACTS读取权限.

我认为有可能在没有此权限的情况下接收联系人,类似于CALL权限:如果我想直接拨打电话,我需要它,但没有它我可以向手机应用程序发送一个号码,用户必须点击在通话按钮上.我不知道
有类似的功能READ_CONTACTS吗?

permissions android contacts android-contentprovider

10
推荐指数
1
解决办法
3231
查看次数

为什么我的类不能实现在其中声明的接口?

我刚刚遇到一种行为,我首先认为它是Eclipse中的一个错误.考虑这个简单的类:

public class Foo {
    public static interface Callback {
        public void onAction();
    }
}
Run Code Online (Sandbox Code Playgroud)

这完全有效.但是,这不是:

public class Foo implements Callback {
    public static interface Callback {
        public void onAction();
    }

    public void onAction() { /*some implementation*/ }
}
Run Code Online (Sandbox Code Playgroud)

但这也是有效的:

public class Foo {
    public static interface Callback {
        public void onAction();
    }

    private final Callback mCallback = new Callback() {
        public void onAction() { /*some implementation*/ }
    };
}
Run Code Online (Sandbox Code Playgroud)

为什么Java迫使我"浪费"一个成员,如果它可以通过让我自己实现它来简单地保存它?我非常清楚将此接口放在自己的文件中的"解决方法",但出于好奇:有没有理由说这不起作用?

java implementation interface inner-classes

9
推荐指数
2
解决办法
2788
查看次数

在Java中自我检查null是否有意义

我经常看到java SourceCode,其中null不作为方法或构造函数的值.这个的典型实现看起来像

public void someMethod(Object someObject){

    if(someObject == null) throw new NullPointerException()

    someObject.aMethodCall()

}
Run Code Online (Sandbox Code Playgroud)

我根本就认为没有任何意义,因为如果我试图在nullPointer上调用一个方法,那么无论如何NullPointerException都会抛出它.我会看到这种方法是否会抛出IllegalArgumentException或其他一些自定义异常.有人可以澄清,为什么这个检查似乎有意义(因为我经常看,我认为,这背后必须有意义),或者为什么它完全是胡说八道

java null coding-style nullpointerexception

8
推荐指数
4
解决办法
593
查看次数

如何覆盖Spring Data CrudRepository上的delete方法?

我有一些我无法删除的对象,并且必须更新名为"已删除"的公共字段而不是它.我在那里读到我可以使用编写通用查询#{#entityName}.出于这个原因,我试图覆盖这样的CrudRepository#delete(…)方法:

public interface DeleteableRepository<T, ID extends Serializable> extends CrudRepository<T,ID>{

    @Override
    @Query("UPDATE #{#entityName} x set x.deleted = 1 where x.id = ?1")
    public void delete(ID id);
}
Run Code Online (Sandbox Code Playgroud)

但我有一个单元测试,显示我错了!

@Test
public void testDelete() {

    SomeDeleteableObject sdo = new SomeDeletableObject();
    sdo = getDeleteableRepository().create(sdo);

    Assert.assertNotNull(sdo);
    Assert.assertNotNull(sdo.getId());
    Assert.assertFalse(sdo.isDeleted());
    getDeleteableRepository().delete(sdo);

    sdo = getDeleteableRepository().findOne(sdo.getId());
    //Fails here

}
Run Code Online (Sandbox Code Playgroud)

是不是可以覆盖那样的CrudRepository方法?

java crud jpql spring-data

8
推荐指数
1
解决办法
4833
查看次数

无法解析符号AndroidJUnit4

我正在尝试为我的应用添加loginfacebook.但是当我添加一个需要这样做的存储库时.它导致了一个错误.AndroidJUnit4现在无法解决.

ExampleInstrumentedTest.java

package com.example.user.enyatravelbataan;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.*;

/**
 * Instrumentation test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
    // Context of the app under test.
    Context appContext = InstrumentationRegistry.getTargetContext();

    assertEquals("com.example.user.enyatravelbataan", 
appContext.getPackageName());
}
}
Run Code Online (Sandbox Code Playgroud)

这是我的构建:gradle(app)

apply plugin: 'com.android.application'

 android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
useLibrary 'org.apache.http.legacy'


repositories {
    mavenCentral() …
Run Code Online (Sandbox Code Playgroud)

java junit4 facebook-login android-studio android-instrumentation

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

Lollipop 5.1设备上的新WebView上的异常

我尝试将WebView添加到我的活动中:

WebView webView = new WebView(this);
Run Code Online (Sandbox Code Playgroud)

在所有设备上都可以正常工作,但是在Android Lollipop 5.1(仅)设备上,我在这一行遇到了异常:

10-18 12:04:29.741 13131-13131/xx.xxxxxx E/AndroidRuntime: FATAL EXCEPTION: main
Process: xx.xxxxxx, PID: 13131
java.lang.RuntimeException: Unable to start activity ComponentInfo{xx.xxxxxx/xx.xxxxxx.activity.login.UseActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
    at android.app.ActivityThread.access$800(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
        Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
        at android.content.res.Resources.getText(Resources.java:299)
        at android.content.res.Resources.getString(Resources.java:385)
        at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684)
        at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)
        at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:631)
        at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:780)
        at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:619)
        at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:556)
        at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:311)
        at …
Run Code Online (Sandbox Code Playgroud)

java android webview

8
推荐指数
1
解决办法
1622
查看次数

如何在SupportActionBar中设置扩展的ActionView宽度以填充可用空间

我尝试使用此处actionView描述的设置MenuItem .

在我的例子中,ActionViewWidget是一个SeekBar.

问题是,当ActionView点击图标时,它的宽度比预期的要小,如下面的截图所示:

在此输入图像描述

在此输入图像描述

文档说:

如果小部件位于应用栏上,则应用应将小部件显示为图标.如果窗口小部件位于溢出菜单中,则应用程序应将窗口小部件显示为菜单项.当用户与操作视图交互时,它会展开以填充应用栏.

就我而言,没有任何东西可以"扩展".它没有占据整个宽度,而是ActionBar微小的.

为了解决这个问题,我尝试使用另一个类似的视图EditText,但得到了类似的结果 (EditText在开始时很小,但在写入时会扩展).它似乎android.support.v7.widget.SearchView适用于文档中使用的.

我也尝试过Theme.AppCompat.Light.DarkActionBarTheme.AppCompat.Light.NoActionBar在布局中提供工具栏而没有任何明显的区别.

这是我使用的代码:

主要活动

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* set this on other layout with toolbar in it
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        */
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.camera_menu, menu);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

app_menu.xml

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-actionbar

8
推荐指数
1
解决办法
771
查看次数

特定长度的输入字节上的Android AES/GCM/NoPadding Bug?

我写了一个用于解除和加密任意数据的类.

它的工作方式如下:因为AndroidKeyStore在卸载应用程序后生成的AES密钥"丢失",我们有一个公钥/私钥对,其中公钥包含在应用程序中.出于故障保存的目的,它用于加密AES密钥,该密钥在IV的每个加密消息前面填充.这样我们就可以使用私钥恢复AES密钥

在单元测试中,我发现它适用于MOST输入.奇怪的是在某些字节数组长度上它失败了(我发现即81920,131073.)

所以这是AESCrypto代码:

package com.mycompany.appname.crypto;

import android.content.Context;
import android.content.SharedPreferences;
import android.security.keystore.KeyProperties;
import android.security.keystore.KeyProtection;
import android.support.annotation.NonNull;
import android.util.Base64;
import android.util.Log;

import com.mycompany.appname.R;

import java.io.DataInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AesGcmCrypto implements Crypto{

    public static final String TAG = AesGcmCrypto.class.getSimpleName();

    private static final String …
Run Code Online (Sandbox Code Playgroud)

arrays encryption android padding

8
推荐指数
1
解决办法
308
查看次数

了解ImageView Matrix的用法

我知道SO充满了Matrix问题,但我找不到一个完全解释的问题.我猜任何ImageView都有一个Matrix,负责缩放,旋转和位置.但为什么我不能像这样使用矩阵旋转图像:

ImageView img = (ImageView)findViewById(R.id.some_imageview);
img.setScaleType(ScaleType.Matrix);
Rect bounds = img.getDrawable.getBounds();
img.getImageMatrix().postRotate(180f, bounds.width() / 2, bounds.height() / 2);
Run Code Online (Sandbox Code Playgroud)

几个答案建议像这样做:

ImageView img = (ImageView)findViewById(R.id.some_imageview);
img.setScaleType(ScaleType.Matrix);
Rect bounds = img.getDrawable.getBounds();
Matrix rotationMatrix = new Matrix();
rotationMatrix.postRotate(180f, bounds.width() / 2, bounds.height() / 2);
img.setImageMatrix(rotationMatrix);
Run Code Online (Sandbox Code Playgroud)

为什么每次我想要旋转时都必须创建一个新的矩阵?此外,如果我从第二个例子设置矩阵,如果我再次设置它为什么它不再旋转(到原始程度)rotationMatrix?如果我想获得原始学位,我可以设置一个简单构造的矩阵.但同样,我不明白为什么

img.getImageMatrix().postRotate(180f, bounds.width() / 2, bounds.height() / 2); 
Run Code Online (Sandbox Code Playgroud)

不管用.

注意:我也尝试过这种setRotate方法,但没有观察到任何差异

编辑:由于评论

我问过为什么每次都要创建一个新的Matrix,这意味着问题,为什么我不能使用Matrix.我怀疑工作的是这个(实际上也不会):

ImageView img = (ImageView)findViewById(R.id.some_imageview);
img.setScaleType(ScaleType.Matrix);
Rect bounds = img.getDrawable.getBounds();
Matrix rotationMatrix = new Matrix();
rotationMatrix.postRotate(180f, bounds.width() / 2, bounds.height() / 2);
img.setImageMatrix(rotationMatrix);
//works until …
Run Code Online (Sandbox Code Playgroud)

android image rotation matrix image-rotation

7
推荐指数
1
解决办法
7010
查看次数