我在我的RPi上托管了一个webservice,我有一个。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事件中),我会将图像显示到图像视图中:
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"));
}
}
);
我的用户清单中有互联网,但每当我运行应用程序时,它就会强制关闭。我觉得这和我的听众有关,但我无法解决。谢谢你的帮助,因为我非常困惑。(虽然我有java desktop的经验,但我对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/? 带ActivityManager:强制完成活动com。实例尼尔。访问控制/。主要活动
我知道这是一个“替代”解决你的问题,但我想张贴它,因为当我遇到它试图解决我的一系列问题时,它也对我有帮助。
我建议您使用Picasso作为您的图像加载器,因为它可以从URL加载图像,并且它还为您提供:
它就这么简单
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
另一方面,如果只加载位图,您可以执行以下操作(如本SO答案中所述):
Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
/* Do something with the bitmap*/
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
/* handle failure */
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
/* you may execute some logic before loading*/
}
};
Picasso.with(context).load(imageURL).into(target);
注:我与毕加索没有任何关系
你的问题是:NetworkOnMainThreadException,你可以在这里阅读文档,但重要的是Android不能在主线程(图形用户界面)上进行“阻塞操作”。
使用AsynkTask或其他线程查询互联网/网络中的数据。
虽然毕加索是一个很好的“图像库”,但我也强烈建议(从谷歌)截取,它有一个优秀的文档,以及几个例子。不仅如此,凌空还将“微观管理”设备上可用网络的最佳库)。
注意,HttpURLConnection在API 19 KitKat上不推荐使用IIRC
我尝试此操作时出现以下错误 警告:fopen(/var/www/ajaxForm/loading.gif):无法打开流:在/var/www/curlmimage中没有这样的文件或目录。php第5行警告:fwrite()希望参数1是资源,布尔值在/var/www/curlmimage中给出。php第6行警告:fclose()希望参数1是资源,布尔值在/var/www/curlmimage中给出。ph
我一直在到处寻找答案,但没有任何帮助。 这是我的代码: 当我试图读取URL时,下面出现了一个异常。 任何帮助都会很好。我正在尝试读取url内部的图像,并将其与现有文件进行比较。这里没有任何问题给出答案。 编辑: 我尝试在命令行“keytool-list-keystore keystore”中输入,但它只显示给我TrustedCertentries。还没有解决方案奏效。
我想知道是否有API可以批量获取维基百科页面的图像URL。 我看到的API是https://en.wikipedia.org/w/api.php?action=query 但是我只得到第一个标题的图片URL。
问题内容: 我已经制作了一个使用JSON Google图像搜索API来提供图像的android应用,但是我注意到Google不再支持它。我还发现Wikidata有时会在某些项目上提供图像属性,但是我似乎无法使用Wikidata API获得图像的URL位置。 有什么方法可以从Wikidata中的项目获取图像URL属性吗? 问题答案: 如果某些Wikidata项(ID为 Qxxx )具有图片(P18)
我想从获取图像:
问题内容: 我正在尝试阅读以下图片 但是它显示了IIOException。 这是代码: 问题答案: 您收到(错误请求)错误,因为您的网址中有。如果在参数之前对其进行了修复,则会收到错误消息(未经授权)。也许您需要一些HTTP标头才能将您的下载标识为可识别的浏览器(使用“ User-Agent”标头)或其他身份验证参数。 对于User-Agent示例,然后通过连接inputstream 使用Imag