我正在尝试使用JAVA从字符串获取URL。但是我的变量在“ Uri.parse”部分中不起作用(变量中没有值)。请考虑我是编码的初学者
错误是:“无法为最终变量'结果'赋值”
我的代码:
showResultDialogue(result.getContents());
..
public void showResultDialogue(final String result) {
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(this);
}
Pattern p = Pattern.compile("[\\w\\.]+\\.(?:com|cc|net|ru|in)[^,\\s]*");
Matcher m = p.matcher(result);
builder.setTitle("Example Title")
.setMessage("Text is " + result);
if(m.matches()) {
builder.setPositiveButton("Go", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent browserIntent = new Intent(
Intent.ACTION_VIEW,
Uri.parse(result) // here is problem
);
startActivity(browserIntent);
}
});
}
答案 0 :(得分:1)
由于您没有提供任何有关为何无法正常工作的信息,我只是假设URL丢失http
,因为您的正则表达式与此不匹配,在这种情况下,我会这样做>
编辑:您真的需要正则表达式吗? Android具有匹配URL的内置方式。
您可以在https://developer.android.com/reference/android/util/Patterns
中找到文档 Patterns.WEB_URL.matcher(result).matches();
所以您的代码将如下所示
if (Patterns.WEB_URL.matcher(result).matches()) {
builder.setPositiveButton("Go", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent browserIntent = new Intent(
Intent.ACTION_VIEW,
Uri.parse(!result.startsWith("http://") && !result.startsWith("https://") ? "http://" + result : result)
);
startActivity(browserIntent);
}
});
}