最近我更新了我的android工作室,更新后,我无法在工具部分找到android设备监视器选项.在之前的更新中,它位于tools-> android-> android device monitor中.但现在在更新版本中,它不存在.你可以查看我的android studio的截图.
我是科特林的新手。我正在 kotlin 中浏览嵌套类和内部类概念。下面是一个嵌套类的例子。
fun main(args: Array<String>) {
val demo = Outer.Nested().foo() // calling nested class method
print(demo)
}
class Outer {
class Nested {
fun foo() = "Hello world"
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出
Hello world
Run Code Online (Sandbox Code Playgroud)
这是内部类的例子。
fun main(args: Array<String>) {
val demo = Outer().Nested().foo() // calling inner class method
print(demo)
}
class Outer {
private val welcomeMessage: String = "Hello world"
inner class Nested {
fun foo() = welcomeMessage
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出
Hello world
Run Code Online (Sandbox Code Playgroud)
我的问题是嵌套类何时可以执行与内部类相同的操作。内部类的目的是什么?为什么我们需要实时内部类?
我在我的示例应用程序中使用 RoomDB。我能够对 DB 执行 CRUD 操作。但我无法查看 db 文件。我想在 sqlite DB 浏览器中查看表结构。
这是我的APPDatabase类
@Database(entities = {User.class}, version = 1,exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase INSTANCE;
public abstract UserDao userDao();
public static AppDatabase getAppDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user-database")
.allowMainThreadQueries()
.build();
}
return INSTANCE;
}
public static void destroyInstance() {
INSTANCE = null;
}
}
Run Code Online (Sandbox Code Playgroud)
帮我获取数据库文件。
我在我的应用程序中使用 RoomDB。能够执行 crud 操作。其实我想看看db文件。
getDatabasePath("user.db").getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我db文件所在的目录,保存目录是这样的
/data/data/com.example.manvish.roomdb/databases/user.db
Run Code Online (Sandbox Code Playgroud)
但即使在命令提示符下使用 sudo ,我仍然无法访问数据目录。现在我想将 DB 文件位置更改为内部存储器或 SD 卡中的其他一些文件夹。我怎样才能做到这一点?
我有一个简单的应用程序,我使用openssl进行一些加密.但我在应用程序启动时获得白屏超过5秒.
这是我的傻瓜:
apply plugin: 'com.android.application'
android {
signingConfigs {
config {
keyAlias 'manvish'
keyPassword 'manvish'
storeFile file('/home/manvish/Android/debug.keystore')
storePassword 'manvish'
}
}
compileSdkVersion 25
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.example.manvish.bwssb"
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
}
android …
Run Code Online (Sandbox Code Playgroud) 我想将一些json字符串发布到某些URL。我得到异常作为
Exception: java.net.SocketTimeoutException: failed to connect to
Run Code Online (Sandbox Code Playgroud)
有关此问题的大量搜索结果,人们建议在改造中增加和减少超时参数。我想知道writeTimeout,readTimeout和connectTimeout之间的区别。这样我就可以触发SocketTimeoutException。这是我的复古客户。
public static Retrofit getClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().writeTimeout(20, TimeUnit.SECONDS).
//.authenticator(new Authen()).
readTimeout(30, TimeUnit.SECONDS).
connectTimeout(20, TimeUnit.SECONDS).
addInterceptor(interceptor).build();
return new Retrofit.Builder()
.baseUrl(DefinesClass.ITS_URL)
// .baseUrl("https://reqres.in")
// .addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(SimpleXmlConverterFactory.create())
.client(client)
.build();
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以对异常帮助人员进行排序?
我在某处读到,通过使用 StrictMode 我们可以避免 android 中的 ANR。我尝试过,下面是代码
public class MyApplication extends Application {
@Override
public void onCreate() {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyFlashScreen()
.penaltyDeath()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.build());
super.onCreate();
}
Run Code Online (Sandbox Code Playgroud)
我尝试生成 ANR 以用于测试目的,如下所示:
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("kishan","onTouchEvent");
while(true) {}
}
Run Code Online (Sandbox Code Playgroud)
但屏幕上仍然出现了 ANR。如何使用StrictMode避免ANR?是否可以?