我遇到了问题我不知道是什么原因造成的.我有一个非常简单的布局,如下所示:
<?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或其他我想念的东西.有人可以给我一个提示,我也可以尝试,或者是什么原因导致这个问题?
我想通过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吗?
我刚刚遇到一种行为,我首先认为它是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 SourceCode,其中null不作为方法或构造函数的值.这个的典型实现看起来像
public void someMethod(Object someObject){
if(someObject == null) throw new NullPointerException()
someObject.aMethodCall()
}
Run Code Online (Sandbox Code Playgroud)
我根本就认为没有任何意义,因为如果我试图在nullPointer上调用一个方法,那么无论如何NullPointerException都会抛出它.我会看到这种方法是否会抛出IllegalArgumentException或其他一些自定义异常.有人可以澄清,为什么这个检查似乎有意义(因为我经常看,我认为,这背后必须有意义),或者为什么它完全是胡说八道
我有一些我无法删除的对象,并且必须更新名为"已删除"的公共字段而不是它.我在那里读到我可以使用编写通用查询#{#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方法?
我正在尝试为我的应用添加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
我尝试将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) 我尝试使用此处actionView描述的设置MenuItem .
在我的例子中,ActionViewWidget是一个SeekBar.
问题是,当ActionView点击图标时,它的宽度比预期的要小,如下面的截图所示:
文档说:
如果小部件位于应用栏上,则应用应将小部件显示为图标.如果窗口小部件位于溢出菜单中,则应用程序应将窗口小部件显示为菜单项.当用户与操作视图交互时,它会展开以填充应用栏.
就我而言,没有任何东西可以"扩展".它没有占据整个宽度,而是ActionBar微小的.
为了解决这个问题,我尝试使用另一个类似的视图EditText,但得到了类似的结果 (EditText在开始时很小,但在写入时会扩展).它似乎android.support.v7.widget.SearchView适用于文档中使用的.
我也尝试过Theme.AppCompat.Light.DarkActionBar或Theme.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) 我写了一个用于解除和加密任意数据的类.
它的工作方式如下:因为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) 我知道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 ×6
java ×6
arrays ×1
bug-tracking ×1
coding-style ×1
contacts ×1
crud ×1
encryption ×1
gravity ×1
image ×1
interface ×1
jpql ×1
junit4 ×1
matrix ×1
null ×1
padding ×1
permissions ×1
rotation ×1
spring-data ×1
webview ×1