gpt4 book ai didi

java - 通过 URL 获取图像的问题

转载 作者:行者123 更新时间:2023-12-02 03:29:01 25 4
gpt4 key购买 nike

我在我的 RPi 上托管一个网络服务,我有一个 .png 图像,我可以从我的 Android 设备通过网络访问该图像。这是我获取该图像的代码:

// Write image to image view
public static Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
return BitmapFactory.decodeStream(input);

} catch (IOException e) {
e.getMessage();
return null;
}
}

这里,当单击按钮时(在 Oncreate 事件中),我将图像显示到 ImageView :

Button picturebutton = (Button) findViewById(R.id.btngetpic);
final ImageView myview = (ImageView) findViewById(R.id.imgview1);

assert picturebutton != null;
picturebutton.setOnClickListener(
new Button.OnClickListener() {
public void onClick(View v) {
TextView mytext = (TextView) findViewById(R.id.mytext);
mytext.setText("done");
myview.setImageBitmap(getBitmapFromURL("http://169.254.XXX.XXX/Images/Itworks.png"));
}
}
);

我的使用 list 中有互联网,但每当我运行应用程序时,它就会强制关闭。我有一种感觉,这与我的听众有关,但我无法修复它。任何帮助表示赞赏,因为我非常困惑。 (尽管我有 Java 桌面方面的经验,但我对 Android 开发还是新手)

编辑:我的异常堆栈从强制关闭的位置

07-13 18:14:00.718 4077-4077/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.neil.access_control, PID: 4077
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
at libcore.io.IoBridge.connect(IoBridge.java:122)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452)
at java.net.Socket.connect(Socket.java:884)
at com.android.okhttp.internal.Platform.connectSocket(Platform.java:117)
at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:160)
at com.android.okhttp.internal.http.SocketConnector.connectCleartext(SocketConnector.java:67)
at com.android.okhttp.Connection.connect(Connection.java:152)
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185)
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
at com.example.neil.access_control.MainActivity.getBitmapFromURL(MainActivity.java:71)
at com.example.neil.access_control.MainActivity$1.onClick(MainActivity.java:54)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

07-13 18:14:00.727 1283-3180/? W/ActivityManager:强制完成 Activity com.example.neil.access_control/.MainActivity

最佳答案

您的问题是:NetworkOnMainThreadException,您可以 read the documentation here ,但重要的是 Android 不能在主线程(图形用户界面)上进行“阻塞操作”。

使用 AsynkTask 或另一个线程来查询互联网/网络中的数据。

虽然 Picasso 是一个很好的“图像库”,但我也强烈推荐 Volley(来自 Google),它有一个优秀的文档,以及几个示例。不仅如此,Volley 还将“微观管理”最好的库以使用设备上可用的网络)。

请注意,API 19 KitKat 上的 IIRC 已弃用 HttpURLConnection

关于java - 通过 URL 获取图像的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com