我有一个简单的WebView启用和WebChromeClient使用 JavaScript 的地方。我正在加载的网页内容有一个select标签。当我点击它时,应用程序崩溃并出现以下错误片段:
android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.Resources.getValue(Resources.java:1351)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2774)
at android.content.res.Resources.getLayout(Resources.java:1165)
at android.view.LayoutInflater.inflate(LayoutInflater.java:421)
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:378)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
at org.chromium.content.browser.input.SelectPopupAdapter.getView(SelectPopupAdapter.java:56)
Run Code Online (Sandbox Code Playgroud)
我找到了这个材料,但它没有帮助,我找不到这个问题的任何解决方案。据我所知,该应用程序仅在 Android 5 和 6 上崩溃。当select按下 HTML 标签时,Android 似乎会尝试显示自己的Spinner. 它使用Resources以某种方式导致错误。我尝试WebView以编程方式创建,但没有帮助。这是我的代码:
val webview = WebView(this)
webview.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
rootLayout.addView(webview)
webview.webChromeClient = WebChromeClient()
webview.settings.javaScriptEnabled = true
webview.loadUrl(intent.getStringExtra(URL))
Run Code Online (Sandbox Code Playgroud)
从谷歌的图书馆,我使用以下内容:
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0-beta01'
Run Code Online (Sandbox Code Playgroud)
我的问题是如何避免这个错误?也许我们可以创建自定义WebView?
我想要实现什么?我想获取捕获图像的URI并将其保存在Firebase上.我尝试了什么?首先,我需要打开相机.以下是我的表现:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null)
startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
捕获图像后,我需要获取图像的URI.以下是我的表现:
if (resultCode == Activity.RESULT_OK) {
if (requestCode == CAMERA_REQUEST_CODE) {
if (data != null) {
if (data.getData() != null) {
Uri capturedImageUri = data.getData();
} else {
Toast.makeText(getContext(), getString(R.string.coudldnt_get_photo), Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getContext(), getString(R.string.coudldnt_get_photo), Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.但仅限于某些设备.我认为它仅适用于超过21个设备的API级别.在其他设备中,getData()返回null.
那么,接下来我做了什么?我发现我可以通过以下代码获取图像的Bitmap:
Bitmap bitmap = (Bitmap)data.getExtras().get("data") ;
Run Code Online (Sandbox Code Playgroud)
所以,我有一个图像的位图.我需要获取此图像的URI.以下是我的表现:
public Uri getImageUri(Context inContext, Bitmap inImage) {
String path =
Images.Media.insertImage(inContext.getContentResolver(), inImage,
"Title", null);
return Uri.parse(path);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码返回我的URI,但图像质量非常差.
所以,我一直在寻找解决方案.并且发现正确的方法是在我启动时创建文件 …
一般来说,我的任务是从所选文件中获取 Base64。为了打开文件浏览器,我调用以下函数:
private fun showFileBrowser() {
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.setType("*/*")
startActivityForResult(intent, FILE_CHOOSE_REQUEST_CODE)
}
Run Code Online (Sandbox Code Playgroud)
就成功打开了。当选择某个文件时,onActivityResult将被调用。这里是:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FILE_CHOOSE_REQUEST_CODE) {
// not that data.data is Uri
if(data != null && data.data != null) {
val encodedBase64 = getBase64FromPath(data.data.path)
print(encodedBase64)
}
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我如何转换File为 base64:
private fun getBase64FromPath(path: String): String {
try {
val bytes = File(path).readBytes()
return Base64.encodeToString(bytes, Base64.DEFAULT)
} catch (error: IOException) { …Run Code Online (Sandbox Code Playgroud) 我想创建一种没有密码和电子邮件的注册。我只使用昵称。所以,我有一个 User 类,它有昵称字段和其他字段。所以,我想推送新用户,我想要的是保存它的密钥,因为我将来需要获取一些用户的数据时需要它。那么我怎样才能得到一个已经被推送的对象的键呢?
这是我如何推送的代码:
User user = new User() ;
user.setNick(nick.getText().toString());
user.setScore(0);
Firebase fire = new Firebase(FirebaseConfig.URL) ;
//how to get key of this object? Is it possible before pushing?
fire.push().setValue(user);
Run Code Online (Sandbox Code Playgroud) 我想知道如果一个类被标记为final,它的编译速度会更快吗?我认为不会,因为将类设为 Final 只会有助于优化 Swift Method Dispatch。
这是我的代码,用于获取文本为“ Make a Dinner”的所有元素。
const params = {
TableName: 'todos',
KeyConditionExpression: 'todoName = :t',
ExpressionAttributeValues: {
':t': 'Make a dinner'
}
};
db.scan(params, (err, data) => {
if (err) {
console.log(err);
}
});
Run Code Online (Sandbox Code Playgroud)
但出现以下错误:Query condition missed key schema element: todo_id。此错误的原因是什么?如何避免呢?我的表中只有主键,没有排序键。
我有一些来自服务器的JSON响应。成功的情况下,可能是这样的:
{
"success": true,
"data": [
{
/// something here
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果所有服务器响应都将成功,那么解析该JSON真的很容易。但是我们也有失败案例,例如:
{
"success": false,
"msg": "Your session expired",
"end_session": true
}
Run Code Online (Sandbox Code Playgroud)
这意味着我们需要处理两种情况。如您所注意到的,类似的属性success, msg可能出现在任何响应中。为了解决这个问题,我创建了以下结构:
struct RegularResponse<T: Codable>: Codable {
let success: Bool
let msg: String?
let endSession: Bool?
let data: T?
enum CodingKeys: String, CodingKey {
case success, msg, data
case endSession = "end_session"
}
}
Run Code Online (Sandbox Code Playgroud)
如果响应成功或不成功,它可能包含一些数据,可以识别出发生错误的原因(使用successattribute或msg)。解析过程如下:
let model = try JSONDecoder().decode(RegularResponse<MyModel>.self, from: data)
if model.success {
// do something with data …Run Code Online (Sandbox Code Playgroud) 我UITableView里面很简单UIViewController。这是我设置的配置和约束:
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.insetsContentViewsToSafeArea = false
view.addSubview(tableView)
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
Run Code Online (Sandbox Code Playgroud)
通过这样做,我取消了 UITableView 中的 safeArea 并设置顶部、底部约束忽略safeAreaLayoutGuide。是的,当我滚动表格时它完美地工作,并且安全区域根据我的需要被忽略。这是显示此内容的图像:
但问题是在一开始我不开始滚动或触摸桌子时。它从安全区域以下开始,而不是在安全区域之外。这里是:
我不希望这样的事情发生。我希望我的UITableView(或第一个UITableViewCell)从最高点忽略安全区域。UITableView即使我正确设置约束,它似乎也会忽略这一点。那么,如何解决这个问题呢?
我有以下C代码:
#include<stdio.h>
#include<stdlib.h>
int main() {
int a[4] = {1,2,3,4};
int b[4] = {1,2,3,4};
int n = &b[3] - &a[2];
printf("%d\n", n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么值为n-3?我对此没有一个纯粹的解释.变量地址之间的区别如何-3?为什么呢-3?
android ×4
ios ×2
swift ×2
android-file ×1
autolayout ×1
base64 ×1
c ×1
codable ×1
firebase ×1
json ×1
memory ×1
node.js ×1
uitableview ×1
uri ×1
webview ×1