Chuyển đổi chuỗi thành Uri


176

Làm cách nào tôi có thể chuyển đổi Chuỗi thành Uri trong Java (Android)? I E:

String myUrl = "http://stackoverflow.com";

myUri = ???;

Câu trả lời:


400

Bạn có thể sử dụng parsephương thức tĩnh từUri

Uri myUri = Uri.parse("http://stackoverflow.com")

4
Tôi đã thử giải pháp này nhưng tôi có một vấn đề với nó. Uri đầu tiên cần được đổi thành URI (nếu là từ gói java.net). Thứ hai, nó không có hàm tạo "phân tích cú pháp". Bạn có biết tôi đang làm gì sai không?
Jürgen K.

2
Có một Urilớp với một parsephương thức developer.android.com/reference/android/net/Uri.html . Ngoài ra còn có một URIlớp developer.android.com/reference/java/net/URI.html mà không có parsephương thức. Vì vậy, lớp đúng để sử dụng là Uri. Hãy chắc chắn rằng bạn đã nhập chính xác
ccheneson

1
@ccheneson Tại sao Uri phải chính xác hơn URI? Với URI bạn chỉ có thể sử dụng createphương thức. Nó đơn giản để sử dụng như Uri. Vậy bạn có lợi ích gì từ Uri?
kaba713

Đúng vậy Nhập khẩu sai là một trong những vấn đề khó chịu của tôi quá.
Omid.N

34

Tôi chỉ đang sử dụng java.net gói . Tại đây bạn có thể làm như sau:

String myUrl = "http://stackoverflow.com";
URI myURI = new URI(myUrl);

URI khác với Uri.
Ali Alaoi

7

Nếu bạn đang sử dụng Kotlin và Kotlin android phần mở rộng, sau đó có một cách đẹp để làm điều này.

val uri = myUriString.toUri()

Để thêm tiện ích mở rộng Kotlin ( KTX ) vào dự án của bạn, hãy thêm phần sau vào build.gradle của mô-đun ứng dụng của bạn

  repositories {
    google()
}

dependencies {
    implementation 'androidx.core:core-ktx:1.0.0-rc01'
}

2

Bạn có thể phân tích Chuỗi thành Uri bằng cách sử dụng Uri.parse () như hiển thị bên dưới:

Uri myUri = Uri.parse("http://stackoverflow.com");

Sau đây là một ví dụ về cách bạn có thể sử dụng Uri mới tạo của mình trong một mục đích ngầm. Để được xem trong một trình duyệt trên điện thoại người dùng.

// Creates a new Implicit Intent, passing in our Uri as the second paramater.
Intent webIntent = new Intent(Intent.ACTION_VIEW, myUri);

// Checks to see if there is an Activity capable of handling the intent
if (webIntent.resolveActivity(getPackageManager()) != null){
    startActivity(webIntent);
}

NB: Có một sự khác biệt giữa URI Android và Uri .


-1

Bạn sẽ làm gì với URI?

Ví dụ: nếu bạn chỉ sử dụng nó với một HTTPGet, bạn chỉ có thể sử dụng chuỗi trực tiếp khi tạo đối tượng HttpGet.

HttpGet get = new HttpGet("http://stackoverflow.com");

2
Nhưng ví dụ android.widget.ImageView.setImageURIsẽ không - vì vậy đây là một câu hỏi hoàn toàn hợp lệ.
Martin

1
thực ra điều này không trả lời được câu hỏi
Jürgen K.

-1

Trình phân tích cú pháp của Java java.net.URIsẽ thất bại nếu URI không được mã hóa hoàn toàn theo các tiêu chuẩn của nó. Ví dụ: cố gắng phân tích : http://www.google.com/search?q=cat|dog. Một ngoại lệ sẽ được ném cho thanh dọc.

urllib giúp dễ dàng chuyển đổi một chuỗi thành a java.net.URI. Nó sẽ xử lý trước và thoát URL.

assertEquals("http://www.google.com/search?q=cat%7Cdog",
    Urls.createURI("http://www.google.com/search?q=cat|dog").toString());
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.