error memory A/libc: Fatal signal 11 (SIGSEGV) at 0x00000008 (code=1), thread 22151 (WebViewCoreThre)

0

i use webview in my application and i want to transfer input type file so when i click on this file within webview i chose image in sdcard so i want to transfer this image to base64 using javascript to take this file base64 and work on it in my source java and set my imageview with this source base64 i hope you understand me because english not my original language.

this java file:

static WebView webView;
private ValueCallback<Uri> mUploadMessage;
public ValueCallback<Uri[]> uploadMessage;
public static final int REQUEST_SELECT_FILE = 100;
private final static int FILECHOOSER_RESULTCODE = 1;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.webview_fragment,container,false);

    webView=view.findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setAllowContentAccess(true);
    webView.getSettings().setBuiltInZoomControls(true);
    //webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    webView.clearCache(false);
    webView.addJavascriptInterface(new DB(),"AndroidFunction");

    webView.loadUrl("file:///android_asset/register/index.html");




    webView.setWebChromeClient(new WebChromeClient() {
    // For 3.0+ Devices (Start)
    // onActivityResult attached before constructor
    protected void openFileChooser(ValueCallback uploadMsg, String acceptType)
    {
        mUploadMessage = uploadMsg;
        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
        i.addCategory(Intent.CATEGORY_OPENABLE);
        i.setType("image/*");
        startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);
    }


    // For Lollipop 5.0+ Devices
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public boolean onShowFileChooser(WebView mWebView, ValueCallback< Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)
    {
        if (uploadMessage != null) {
            uploadMessage.onReceiveValue(null);
            uploadMessage = null;
        }

        uploadMessage = filePathCallback;

        Intent intent = fileChooserParams.createIntent();
        try
        {
            startActivityForResult(intent, REQUEST_SELECT_FILE);
        } catch (ActivityNotFoundException e)
        {
            uploadMessage = null;
            Toast.makeText(getActivity().getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show();
            return false;
        }
        return true;
    }

    //For Android 4.1 only
    protected void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
    {
        mUploadMessage = uploadMsg;
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("image/*");
        startActivityForResult(Intent.createChooser(intent, "File Browser"), FILECHOOSER_RESULTCODE);
    }


    protected void openFileChooser(ValueCallback<Uri> uploadMsg)
    {
        mUploadMessage = uploadMsg;
        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
        i.addCategory(Intent.CATEGORY_OPENABLE);
        i.setType("image/*");
        startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
    }
});
    return view;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent)
{
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    {
        if (requestCode == REQUEST_SELECT_FILE)
        {
            if (uploadMessage == null)
                return;
            uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));
            uploadMessage = null;
        }
    }
    else if (requestCode == FILECHOOSER_RESULTCODE)
    {
        if (null == mUploadMessage)
            return;
        // Use MainActivity.RESULT_OK if you're implementing WebView inside Fragment
        // Use RESULT_OK only if you're implementing WebView inside an Activity
        Uri result = intent == null || resultCode != MainActivity.RESULT_OK ? null : intent.getData();
        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;
    }
    else
        Toast.makeText(getActivity().getApplicationContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show();
}

}

class DB{

public DB(){

}

@JavascriptInterface
public void addToDB(String name, String lastName, String email, String pwd, String yearChild, String gender, Base64 srcImg){

    System.out.println(" le nom est: "+name+" prenom est: "+lastName+" email est: "+email+" password est: "+pwd+" le year child est: "+yearChild+" le gender est: "+gender);

}

}

and this my input image type image:

    <input type="file" name="name" id="image" placeholder="Photo" required/>

and that javascript code:

<script>

function stor(){

AndroidFunction.addToDB(encodeImageFileAsURL());

}

function encodeImageFileAsURL() {

var filesSelected = document.getElementById("image").files;
var srcData;

if (filesSelected.length > 0) {
  var fileToLoad = filesSelected[0];

  var fileReader = new FileReader();

  fileReader.onload = function(fileLoadedEvent) {
     srcData = fileLoadedEvent.target.result; // <--- data: base64

  }
  fileReader.readAsDataURL(fileToLoad);
  return srcData;

}

}

any way to solve this problem or any alternative solution or alternative of base64 and thanks for that.

javascript
java
android
android-studio
webview
asked on Stack Overflow Feb 15, 2019 by Sport_ HD

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0