小编neo*_*neo的帖子

为什么单击网页内容中的选择标签会导致崩溃?

我有一个简单的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

android webview

6
推荐指数
1
解决办法
842
查看次数

如何获取uri捕获的照片?

我想要实现什么?我想获取捕获图像的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,但图像质量非常差.

所以,我一直在寻找解决方案.并且发现正确的方法是在我启动时创建文件 …

android uri android-camera android-fileprovider

5
推荐指数
2
解决办法
6847
查看次数

如何从文件的 URI 获取 Base64?

一般来说,我的任务是从所选文件中获取 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)

base64 android android-file

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

如何获取刚刚在 Firebase 中推送的对象的键?

我想创建一种没有密码和电子邮件的注册。我只使用昵称。所以,我有一个 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)

android firebase firebase-realtime-database

3
推荐指数
1
解决办法
1438
查看次数

将类设置为final有助于编译时间更快吗?

我想知道如果一个类被标记为final,它的编译速度会更快吗?我认为不会,因为将类设为 Final 只会有助于优化 Swift Method Dispatch。

swift

3
推荐指数
1
解决办法
958
查看次数

AWS DynamoDb中“查询条件缺少键架构元素”的原因是什么?

这是我的代码,用于获取文本为“ 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。此错误的原因是什么?如何避免呢?我的表中只有主键,没有排序键。

amazon-web-services node.js amazon-dynamodb

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

如何使用Codable处理JSON响应的失败案例?

我有一些来自服务器的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)

json ios swift codable

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

使用tableview时如何删除安全区域?

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即使我正确设置约束,它似乎也会忽略这一点。那么,如何解决这个问题呢?

uitableview ios autolayout safearealayoutguide

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

为什么这个'C'代码的输出是这样的?

我有以下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

c memory

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