แปลงสตริงเป็น Uri


177

ฉันจะแปลงสตริงเป็น Uri ใน Java (Android) ได้อย่างไร เช่น:

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

myUri = ???;

คำตอบ:


400

คุณสามารถใช้parseวิธีการคงที่จากUri

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

4
ฉันได้ลองวิธีนี้แล้ว แต่ฉันมีปัญหากับมัน Uri แรกต้องเปลี่ยนเป็น URI (หากมาจากแพ็คเกจ java.net) ประการที่สองมันไม่ได้มี "แจง" คอนสตรัค คุณมีความคิดใด ๆ ที่ฉันทำผิดหรือเปล่า?
Jürgen K.

2
มีเป็นUriชั้นด้วยparseวิธีdeveloper.android.com/reference/android/net/Uri.html นอกจากนี้ยังมีURIคลาสdeveloper.android.com/reference/java/net/URI.htmlโดยไม่มีparseวิธีการ Uriดังนั้นระดับที่เหมาะสมที่จะใช้เป็น ตรวจสอบให้แน่ใจว่าคุณมีการนำเข้าที่ถูกต้อง
ccheneson

1
@ccheneson ทำไม Uri ถึงควรถูกต้องมากกว่านั้น URI ด้วย URI คุณสามารถใช้createวิธีนี้ได้ มันใช้งานง่ายเหมือน Uri แล้วคุณได้ประโยชน์อะไรจาก Uri
kaba713

ถูกต้องแล้ว. การนำเข้าผิดเป็นหนึ่งในปัญหาที่น่ารำคาญเช่นกัน
Omid.N

34

ฉันเพียงแค่ใช้แพคเกจjava.net ที่นี่คุณสามารถทำสิ่งต่อไปนี้:

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

URI นั้นแตกต่างจาก Uri
Ali Alaoi

7

หากคุณกำลังใช้Kotlinและ Kotlin หุ่นยนต์ส่วนขยายแล้วมีวิธีที่สวยงามของการทำเช่นนี้

val uri = myUriString.toUri()

หากต้องการเพิ่มส่วนขยาย Kotlin ( KTX ) ให้กับโครงการของคุณให้เพิ่มสิ่งต่อไปนี้ใน build.gradle ของโมดูลแอป

  repositories {
    google()
}

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

3

คุณสามารถวิเคราะห์สตริงเป็น Uri ได้โดยใช้Uri.parse ()ดังที่แสดงด้านล่าง:

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

ต่อไปนี้เป็นตัวอย่างของวิธีที่คุณสามารถใช้ Uri ที่สร้างขึ้นใหม่ของคุณโดยเจตนา ที่จะดูในเบราว์เซอร์บนโทรศัพท์ของผู้ใช้

// 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);
}

หมายเหตุ:มีความแตกต่างระหว่างหุ่นยนต์เป็นURIและยูริ


-1

คุณจะทำอะไรกับ URI

หากคุณเพิ่งจะใช้มันกับ HttpGet เช่นคุณสามารถใช้สตริงโดยตรงเมื่อสร้างอินสแตนซ์ HttpGet

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

2
แต่ตัวอย่างandroid.widget.ImageView.setImageURIจะไม่ - ดังนั้นจึงเป็นคำถามที่ถูกต้องสมบูรณ์
Martin

1
จริงๆแล้วสิ่งนี้ไม่ตอบคำถาม
Jürgen K.

-1

โปรแกรมแยกวิเคราะห์ของ Java java.net.URIกำลังจะล้มเหลวหาก URI ไม่ได้เข้ารหัสตามมาตรฐานอย่างสมบูรณ์ http://www.google.com/search?q=cat|dogตัวอย่างเช่นลองที่จะแยก: จะมีข้อยกเว้นเกิดขึ้นสำหรับแถบแนวตั้ง

urllibทำให้การแปลงสตริงเป็น a java.net.URIได้ง่าย มันจะประมวลผลล่วงหน้าและหลีกเลี่ยง URL

assertEquals("http://www.google.com/search?q=cat%7Cdog",
    Urls.createURI("http://www.google.com/search?q=cat|dog").toString());
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.