ในการดึง API มาใช้ในตัว โมบายแอฟ

แลกเปลี่ยนประสบการณ์และ ปัญหาการใช้งาน Mobile การพัฒนา App บน SmartMobile , tablet Android, iOS, Window Phone และ ฯลฯ

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

เพิ่ม throws IOException ไปด้วยค่ะ
bolue เขียน: 08/09/2022 9:34 am ต้องมีการ try Except ค่ะ ตัวอย่าง

โค้ด: เลือกทั้งหมด

public void sendGetRequest(String url) throws IOException {
 OkHttpClient client = new OkHttpClient();
 Request request = new Request.Builder().url(url).build();
 try (Response response = client.newCall(request).execute()) {
  String responseBody = response.body().string();
  // ... do something with response
 }
}
และกลับไปใช้ execute เหมือนเดิมค่ะ
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

ปรับแก้ เพิ่ม (String url) throws IOException

โค้ด: เลือกทั้งหมด

public void PDFtpic (String url) throws IOException{
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{" +
                "\r\n  \"pdf_base64\": \"(ใส่ base64)\"," +
                "\r\n  \"username\": \"(ใส่ ชื่อู้ใช้)\"," +
                "\r\n  \"name_pdf\": \"(ใส่ ชื่อ PDF)\"," +
                "\r\n  \"type_file_pdf\": \"(ใส่ ประเภท PDF)\"\r\n}");
        Request request = new Request.Builder().url("http://127.0.0.1:8000/api_pdftopic").build();
        try (Response response = client.newCall(request).execute()) {
            String responseBody = response.body().string();
            // ... do something with response
        }
        Response response = client.newCall(request).execute();
    }
เออเร่อที่เกิดขึ้นค่ะ
C:\Users\fonfo\AndroidStudioProjects\PDFToolkits\app\src\main\java\com\example\pdftoolkits\PDFtoPic.java:56: error: incompatible types: try-with-resources not applicable to variable type
try (Response response = client.newCall(request).execute()) {
^
(Response cannot be converted to AutoCloseable)
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

จากที่พี่แนะนำมานะคะ เออเร่อ .execute() หายไปเพราะใส่ throws IOException และทดสอบเขียนฟังก์ชันแยก จากกนั้นเรียกใช้งานฟังก์ชันในปุ่มที่ต้องการ เออเร่อ.execute() ในส่วนเดิมหายไปแล้วค่ะ สามารถรันแอปพลิเคชั่นขึ้นมาได้

โค้ด: เลือกทั้งหมด

public void PDFtpic (View view) throws IOException {
//        startActivity(new Intent(this,watermark.class));
//        OkHttpClient client = new OkHttpClient();
//        MediaType mediaType = MediaType.parse("application/json");
//        RequestBody body = RequestBody.create(mediaType, "{\r\n  \"curPage\": \"1\"\r\n}");
//        Request request = new Request.Builder()
//                .url("http://127.0.0.1:8000/page")
//                .method("POST", body)
//                .addHeader("Content-Type", "application/json")
//                .build();
//        client.newCall(request).execute();
//        Response response = client.newCall(request).execute();
        sendGetRequest();
    }
    public void sendGetRequest() throws IOException {
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{\r\n  \"curPage\": \"1\"\r\n}");
        Request request = new Request.Builder()
                .url("http://127.0.0.1:8000/page")
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .build();
        client.newCall(request).execute();
    }
}
เมื่อทดสอบกดปุ่มที่มีการเรียกใช้งานฟังก์ชันแอฟพลิเคชั่นหยุดการทำงานและ มีการแจ้งเออเร่อตามนี้ค่ะ
2022-09-08 12:35:25.148 28830-28830/com.example.pdftoolkits E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.pdftoolkits, PID: 28830
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:446)
at android.view.View.performClick(View.java:5638)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View$PerformClick.run(View.java:22430)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6176)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441)
at android.view.View.performClick(View.java:5638) 
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194) 
at android.view.View$PerformClick.run(View.java:22430) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6176) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1373)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
at java.net.Socket.connect(Socket.java:605)
at com.squareup.okhttp.internal.Platform$Android.connectSocket(Platform.java:190)
at com.squareup.okhttp.Connection.connectSocket(Connection.java:196)
at com.squareup.okhttp.Connection.connect(Connection.java:172)
at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367)
at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
at com.squareup.okhttp.Call.getResponse(Call.java:267)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
at com.squareup.okhttp.Call.execute(Call.java:79)
at com.example.pdftoolkits.PDFtoPic.sendGetRequest(PDFtoPic.java:71)
at com.example.pdftoolkits.PDFtoPic.PDFtpic(PDFtoPic.java:59)
at java.lang.reflect.Method.invoke(Native Method) 
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441) 
at android.view.View.performClick(View.java:5638) 
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194) 
at android.view.View$PerformClick.run(View.java:22430) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6176) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

.url("http://127.0.0.1:8000/page") เปลี่ยนเป็น ip ตัวเครื่องหลัก มาใช้แทน นะคะ
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

จากที่พี่แนะนำ ลองเอา IP Address ของเครื่องที่ใช้อยู่แทน host โดยมีการรันในส่วนของ python คือ

โค้ด: เลือกทั้งหมด

uvicorn main:app --reload --host 192.***.**.***
เมื่อสั่งรันแล้ว จากนั้นไปทำการเปลี่ยน url ในโค้ดของ โมบายแอฟ

โค้ด: เลือกทั้งหมด

public void sendGetRequest() throws IOException {
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{\r\n  \"curPage\": \"1\"\r\n}");
        Request request = new Request.Builder()
                .url("http://192.***.**.***:8000/page")
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .build();
        client.newCall(request).execute();
    }
}
จากนั้นทำการสั่งรันแล้วกดปุ่มที่มีการเรียกใช้งานฟังก์ชั่น เกิดเออเร่อคือ
2022-09-09 09:36:29.160 4853-4853/com.example.pdftoolkits E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.pdftoolkits, PID: 4853
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:446)
at android.view.View.performClick(View.java:5638)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View$PerformClick.run(View.java:22430)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6176)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441)
at android.view.View.performClick(View.java:5638) 
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194) 
at android.view.View$PerformClick.run(View.java:22430) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6176) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1373)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
at java.net.Socket.connect(Socket.java:605)
at com.squareup.okhttp.internal.Platform$Android.connectSocket(Platform.java:190)
at com.squareup.okhttp.Connection.connectSocket(Connection.java:196)
at com.squareup.okhttp.Connection.connect(Connection.java:172)
at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367)
at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
at com.squareup.okhttp.Call.getResponse(Call.java:267)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
at com.squareup.okhttp.Call.execute(Call.java:79)
at com.example.pdftoolkits.PDFtoPic.sendGetRequest(PDFtoPic.java:70)
at com.example.pdftoolkits.PDFtoPic.PDFtpic(PDFtoPic.java:59)
at java.lang.reflect.Method.invoke(Native Method) 
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441) 
at android.view.View.performClick(View.java:5638) 
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194) 
at android.view.View$PerformClick.run(View.java:22430) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6176) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามในการดึง API มาใช้ในตัว โมบายแอฟค่ะ สามารถแก้ไขหรือปรับแก้ส่วนไหนเพิ่มเติมได้บ้างคะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41232
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

ลองปรับเป็นรับค่า จาก json กลับมาด้วยการ เรีบก request หาไฟล์ json โดยตรง แบบไม่ต้องส่ง parameter เพื่อข้ามขั้นตอนที่ติด อยูไปทำส่วนอื่นก่อน
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

mindphp เขียน: 10/09/2022 12:12 pm ลองปรับเป็นรับค่า จาก json กลับมาด้วยการ เรีบก request หาไฟล์ json โดยตรง แบบไม่ต้องส่ง parameter เพื่อข้ามขั้นตอนที่ติด อยูไปทำส่วนอื่นก่อน
เนื่องจากยังไม่เคยทำงานในลักษณะนี้ จากที่พี่แนะนำมา ยังไม่เข้าใจค่ะ รบกวนอธิบายเพิ่มเติมหรือยกตัวอย่างเพิ่มเติมทีค่ะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: ในการดึง API มาใช้ในตัว โมบายแอฟ

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามในการดึง API มาใช้ในตัว โมบายแอฟค่ะ สามารถแก้ไขหรือปรับแก้ส่วนไหนเพิ่มเติมได้บ้างคะ
you're the only one treasure💎
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 59