質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

1049閲覧

エラー: 式の開始が不正です のエラー

tomtom1

総合スコア168

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/10/15 05:39

編集2019/10/15 07:28

###実現したいこと
表題のエラーを直したいです。
WebViewでファイルのアップロードの実装中です。
アルバムから画像を選択するというところまでたどり着きましたが、選択した画像の読み込みが出来ません。そこで、onActivityResultを追加しましたが、表題のエラーが出てしまいます。(onActivityResult部分を追加するまでは正常に稼働します!)
自分見る限り、メソッドも正しく閉じられている気がするのですが、何故このようなエラーが起きるのでしょうか..。

###コード・エラーまでの経緯
現在はこの様なコードになっているます。画像の読み込みが出来ないため、onActivityResultメソッドを取り組みたいと思います。

java

1public class MainActivity extends AppCompatActivity { 2 private final static int FCR = 1; 3 private static final int INPUT_FILE_REQUEST_CODE = ; 4 WebView webView; 5 private String mCM; 6 private ValueCallback<Uri> mUM; 7 private ValueCallback<Uri[]> mUMA; 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_main); 13 14 webView = findViewById(R.id.webview); 15 if (Build.VERSION.SDK_INT >= 23 && (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)) { 16 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 1); 17 } 18 assert webView != null; 19 20 WebSettings webSettings = webView.getSettings(); 21 webSettings.setJavaScriptEnabled(true); 22 webSettings.setAllowFileAccess(true); 23 webView.getSettings().setLoadWithOverviewMode(true); 24 webView.getSettings().setUseWideViewPort(true); 25 webView.getSettings().setSupportZoom(true); 26 webView.getSettings().setBuiltInZoomControls(true); 27 if (Build.VERSION.SDK_INT >= 21) { 28 webSettings.setMixedContentMode(0); 29 webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 30 } else if (Build.VERSION.SDK_INT >= 19) { 31 webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 32 } else if (Build.VERSION.SDK_INT < 19) { 33 webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 34 } 35 webView.setWebViewClient(new Callback()); 36 //webView.loadUrl("https://infeeds.com/"); 37 webView.loadUrl("https://google.com"); 38 39 webView.setWebChromeClient(new WebChromeClient() { 40 41 //For Android 3.0+ 42 public void openFileChooser(ValueCallback<Uri> uploadMsg) { 43 44 mUM = uploadMsg; 45 Intent i = new Intent(Intent.ACTION_GET_CONTENT); 46 i.addCategory(Intent.CATEGORY_OPENABLE); 47 i.setType("*/*"); 48 MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FCR); 49 } 50 51 // For Android 3.0+, above method not supported in some android 3+ versions, in such case we use this 52 public void openFileChooser(ValueCallback uploadMsg, String acceptType) { 53 54 mUM = uploadMsg; 55 Intent i = new Intent(Intent.ACTION_GET_CONTENT); 56 i.addCategory(Intent.CATEGORY_OPENABLE); 57 i.setType("*/*"); 58 MainActivity.this.startActivityForResult( 59 Intent.createChooser(i, "File Browser"), 60 FCR); 61 } 62 63 //For Android 4.1+ 64 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { 65 66 mUM = uploadMsg; 67 Intent i = new Intent(Intent.ACTION_GET_CONTENT); 68 i.addCategory(Intent.CATEGORY_OPENABLE); 69 i.setType("*/*"); 70 MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FCR); 71 } 72 73 //For Android 5.0+ 74 public boolean onShowFileChooser( 75 WebView webView, ValueCallback<Uri[]> filePathCallback, 76 WebChromeClient.FileChooserParams fileChooserParams) { 77 78 if (mUMA != null) { 79 mUMA.onReceiveValue(null); 80 } 81 82 mUMA = filePathCallback; 83 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 84 85 86 Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); 87 contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); 88 contentSelectionIntent.setType("*/*"); 89 Intent[] intentArray; 90 91 if (takePictureIntent != null) { 92 intentArray = new Intent[]{takePictureIntent}; 93 } else { 94 intentArray = new Intent[0]; 95 } 96 97 Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); 98 chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); 99 chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); 100 chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); 101 startActivityForResult(chooserIntent, FCR); 102 103 return true; 104 } 105 106 }); 107 108 } 109//↓ここからを追加した際にエラー発生 110//ここにonActivityResultコードを追加すると、、、 111//ここまで 112 public class Callback extends WebViewClient { 113 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 114 Toast.makeText(getApplicationContext(), "Failed loading app!", Toast.LENGTH_SHORT).show(); 115 } 116 } 117}

付け加えるonActivityResultメソッドは以下になります。

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == INPUT_FILE_REQUEST_CODE) { ValueCallback mFilePathCallback; if (mFilePathCallback == null) { super.onActivityResult(requestCode, resultCode, data); return; } Uri[] results = null; // Check that the response is a good one if (resultCode == RESULT_OK) { String dataString = data.getDataString(); if (dataString != null) { results = new Uri[]{Uri.parse(dataString)}; } } mFilePathCallback.onReceiveValue(results); mFilePathCallback = null; } }

上記コードを付け加えると、INPUT_FILE_REQUEST_CODEがエラーになるため、
Create constant fieldをします。

イメージ説明

そうすると下記の様に加えられますが、この時からビルドすると、表題のエラーが発生します。
イメージ説明

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2019/10/15 05:47

コンパイルエラーの内容は勝手に切らず、必要なところ全文載せてください。行番号情報とかありませんか? 照らし合わせればおおよそ原因が分かりませんでしょうか。
tomtom1

2019/10/15 06:51

つまりは先ほど載せたコードが原因ではなかったという事ですね!ありがとうございます。全文載せました!
dodox86

2019/10/15 06:55

> 先ほど載せたコードが原因ではなかったという事ですね! そうではないです。載せたコードが原因かどうか、それを切り分けるためにエラーの内容を載せてくださいという意味です。
dodox86

2019/10/15 06:59

原因は、public class Callback extends WebViewClient ... これの定義位置ではありませんか?
dodox86

2019/10/15 07:24 編集

それだけじゃなさそうでした。private static final int INPUT_FILE_REQUEST_CODE = ; ?? 別途回答を試みます。
tomtom1

2019/10/15 07:30

度々ご回答ありがとうございます!助かります > <!自分でも確認しましたところ、先ほど全文載せたコードですが、自分でもこうかこうかと度々いじっていた事により、色々とめちゃくちゃになっていたかもしれません! 改めて一つ一つ確認しました!改めて、経緯など追記しました!
tomtom1

2019/10/15 07:31

そしておっしゃる通り、private static final int INPUT_FILE_REQUEST_CODE = ;を加えた際に、表題のエラーが発生しました。 = のあとに何か加えるのでしょうか?
dodox86

2019/10/15 07:39

> 表題のエラーが発生しました。 = のあとに何か加えるのでしょうか? ?それは私が聞きたいところです。コードの内容は理解されていますか? > 自分でもこうかこうかと度々いじっていた事により、色々とめちゃくちゃになっていたかもしれません! それでは最終的に動かないでしょうし、回答もしかねます。
tomtom1

2019/10/15 07:46

あっっごめんなさい、ニュアンス違いましたね、質問変えます。INPUT_FILE_REQUEST_CODEの赤字エラーを直すためにはどの様にすればよろしかったらでしょうか?
guest

回答3

0

エスパーしますが、別のメソッドの途中でこれを書いていませんか?

投稿2019/10/15 05:50

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomtom1

2019/10/15 06:54

ご確認ありがとうございます、うー、別のメソッドの途中で書いていないと思います。全文付け加えました!
guest

0

ベストアンサー

本質問で解決したいことは「エラー: 式の開始が不正です のエラー」だと判断しましたので、コンパイルエラーだけ取りました。最終的に質問者さんの所望する動きになっているかは確認していませんし、恐らくこのままでは動かないと思います。

エラーの原因1: 冒頭で以下のようにコードを書いている為

Java

1private static final int INPUT_FILE_REQUEST_CODE = ;

INPUT_FILE_REQUEST_CODEonActivityResultにおいて値自体に意味を持たないものとして利用しているので、1をセットするようにします。
しかしながらここだけ修正しても、onActivityResult内で変数mFilePathCallbackが初期化していないまま利用しているので、コンパイルエラーになります。

Java

1protected void onActivityResult(int requestCode, int resultCode, Intent data) { 2if (requestCode == INPUT_FILE_REQUEST_CODE) { 3 ValueCallback mFilePathCallback; 4 if (mFilePathCallback == null) { 5...

上記2つを改修したら、コンパイルエラーは無くなりました。全コードを載せます。// コンパイルエラー対応#N:の部分がそうです。

Java

1package com.example.myapplication; 2 3import androidx.appcompat.app.AppCompatActivity; 4import androidx.core.app.ActivityCompat; 5import androidx.core.content.ContextCompat; 6 7import android.Manifest; 8import android.content.Intent; 9import android.content.pm.PackageManager; 10import android.net.Uri; 11import android.os.Build; 12import android.os.Bundle; 13import android.provider.MediaStore; 14import android.view.View; 15import android.webkit.ValueCallback; 16import android.webkit.WebChromeClient; 17import android.webkit.WebSettings; 18import android.webkit.WebView; 19import android.webkit.WebViewClient; 20import android.widget.Toast; 21 22public class MainActivity extends AppCompatActivity { 23 private final static int FCR = 1; 24 // コンパイルエラー対応#1: 値がセットされていないので 1をセットした。 25 private static final int INPUT_FILE_REQUEST_CODE = 1; 26 WebView webView; 27 private String mCM; 28 private ValueCallback<Uri> mUM; 29 private ValueCallback<Uri[]> mUMA; 30 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_main); 35 36 webView = findViewById(R.id.webview); 37 if (Build.VERSION.SDK_INT >= 23 && (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)) { 38 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 1); 39 } 40 assert webView != null; 41 42 WebSettings webSettings = webView.getSettings(); 43 webSettings.setJavaScriptEnabled(true); 44 webSettings.setAllowFileAccess(true); 45 webView.getSettings().setLoadWithOverviewMode(true); 46 webView.getSettings().setUseWideViewPort(true); 47 webView.getSettings().setSupportZoom(true); 48 webView.getSettings().setBuiltInZoomControls(true); 49 if (Build.VERSION.SDK_INT >= 21) { 50 webSettings.setMixedContentMode(0); 51 webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 52 } else if (Build.VERSION.SDK_INT >= 19) { 53 webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 54 } else if (Build.VERSION.SDK_INT < 19) { 55 webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 56 } 57 webView.setWebViewClient(new Callback()); 58 //webView.loadUrl("https://infeeds.com/"); 59 webView.loadUrl("https://google.com"); 60 61 webView.setWebChromeClient(new WebChromeClient() { 62 63 //For Android 3.0+ 64 public void openFileChooser(ValueCallback<Uri> uploadMsg) { 65 66 mUM = uploadMsg; 67 Intent i = new Intent(Intent.ACTION_GET_CONTENT); 68 i.addCategory(Intent.CATEGORY_OPENABLE); 69 i.setType("*/*"); 70 MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FCR); 71 } 72 73 // For Android 3.0+, above method not supported in some android 3+ versions, in such case we use this 74 public void openFileChooser(ValueCallback uploadMsg, String acceptType) { 75 76 mUM = uploadMsg; 77 Intent i = new Intent(Intent.ACTION_GET_CONTENT); 78 i.addCategory(Intent.CATEGORY_OPENABLE); 79 i.setType("*/*"); 80 MainActivity.this.startActivityForResult( 81 Intent.createChooser(i, "File Browser"), 82 FCR); 83 } 84 85 //For Android 4.1+ 86 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { 87 88 mUM = uploadMsg; 89 Intent i = new Intent(Intent.ACTION_GET_CONTENT); 90 i.addCategory(Intent.CATEGORY_OPENABLE); 91 i.setType("*/*"); 92 MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FCR); 93 } 94 95 //For Android 5.0+ 96 public boolean onShowFileChooser( 97 WebView webView, ValueCallback<Uri[]> filePathCallback, 98 WebChromeClient.FileChooserParams fileChooserParams) { 99 100 if (mUMA != null) { 101 mUMA.onReceiveValue(null); 102 } 103 104 mUMA = filePathCallback; 105 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 106 107 108 Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); 109 contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); 110 contentSelectionIntent.setType("*/*"); 111 Intent[] intentArray; 112 113 if (takePictureIntent != null) { 114 intentArray = new Intent[]{takePictureIntent}; 115 } else { 116 intentArray = new Intent[0]; 117 } 118 119 Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); 120 chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); 121 chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); 122 chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); 123 startActivityForResult(chooserIntent, FCR); 124 125 return true; 126 } 127 128 }); 129 130 } 131 //↓ここからを追加した際にエラー発生 132 @Override 133 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 134 if (requestCode == INPUT_FILE_REQUEST_CODE) { 135 // コンパイルエラー対応#2: 初期化していないと、以下のコンパイルエラーになる 136 // エラー: 変数mFilePathCallbackは初期化されていない可能性があります 137 ValueCallback mFilePathCallback = null; 138 if (mFilePathCallback == null) { 139 super.onActivityResult(requestCode, resultCode, data); 140 return; 141 } 142 Uri[] results = null; 143 144 // Check that the response is a good one 145 if (resultCode == RESULT_OK) { 146 String dataString = data.getDataString(); 147 if (dataString != null) { 148 results = new Uri[]{Uri.parse(dataString)}; 149 } 150 } 151 mFilePathCallback.onReceiveValue(results); 152 mFilePathCallback = null; 153 } 154 } 155 156 //ここまで 157 public class Callback extends WebViewClient { 158 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 159 Toast.makeText(getApplicationContext(), "Failed loading app!", Toast.LENGTH_SHORT).show(); 160 } 161 } 162} 163

重ねて書きますが、コンパイルエラーを取っただけのものですので、ご注意ください。

投稿2019/10/15 08:02

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomtom1

2019/10/15 08:20

ありがとうございます!おっしゃる通り、コンパイルエラーがなくなりました。また、恐らくこのままでは動かないと思うとのことでしたが、その通りで、まだファイルを読み込むことは叶いませんでした。ですが表題について解決しましたので、ベストアンサーとさせて頂きます! 自分でもここから「ファイルをアップロードするために読み込みをする」の部分について模索しますが、宜しければヒントやご指摘もお分かりであれば是非お願いします。
guest

0

もひとつエスパー。

あるあるなのが、余計なカッコがあるとか、カッコの数があってないとか。

投稿2019/10/15 06:22

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomtom1

2019/10/15 06:52

皆様のご回答から先ほどの部分が原因でない事が把握出来ました、ありがとうございます。全文載せましたのでご確認頂ければ幸いです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問