微信分享中的图片,想从服务端获取要怎么做

Amy安 2016-04-21 04:41:01
04-21 15:10:43.793 22472-22472/com.app D/AndroidRuntime: Shutting down VM
04-21 15:10:43.813 22472-22472/com.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app, PID: 22472
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yxdapp/.yxdapp.wxapi.WXEntryActivity}: android.os.NetworkOnMainThreadException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:367)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:295)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:190)
at java.net.URL.openStream(URL.java:470)
at com.lblll.yulingkeji.yxdapp.wxapi.WXEntryActivity.loadImageFromNetwork(WXEntryActivity.java:145)
at com.lblll.yulingkeji.yxdapp.wxapi.WXEntryActivity.share2weixin(WXEntryActivity.java:113)
at com.lblll.yulingkeji.yxdapp.wxapi.WXEntryActivity.onCreate(WXEntryActivity.java:69)
at android.app.Activity.performCreate(Activity.java:6288)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) 
at android.app.ActivityThread.access$900(ActivityThread.java:177) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5942) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 




方法一
/*
drawableSharePic = loadImageFromNetwork("reg","http://www.xxx.com/Android/shareImg/share_deal.jpg");

BitmapDrawable bd = (BitmapDrawable) drawableSharePic;
Bitmap thumb = bd.getBitmap();
msg.setThumbImage(thumb); //= Util.bmpToByteArray(thumb, true);

private Drawable loadImageFromNetwork(String type,String imageUrl)
{

Drawable drawable = null;
try {

drawable = Drawable.createFromStream(new URL(imageUrl).openStream(), "share_reg.jpg");

} catch (IOException e) {

}
if (drawable == null) {
//如果没有成功从服务器获取图片 则用logo
drawable = getResources().getDrawable(R.drawable.logo);
}

return drawable ;
}

*/

方法二
int WX_THUMB_SIZE = 120;
Bitmap bmp = BackwardSupportUtil.BitmapFactory.getBitmapFromURL(Constants.IMAGE_URL);
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, WX_THUMB_SIZE, WX_THUMB_SIZE, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);



两种方法都是同样的错误,求教这里要怎么做
...全文
341 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
画虎烂 2016-04-22
  • 打赏
  • 举报
回复
Caused by: android.os.NetworkOnMainThreadException 网络请求不能在主线程操作
Amy安 2016-04-22
  • 打赏
  • 举报
回复
引用 7 楼 jklwan 的回复:
引用 6 楼 jklwan 的回复:
使用方式new DownLoad().execute(imageurl);
doInBackground前的String 改为Drawable
msg.setThumbImage(thumb); 这里没法直接在里面进行 我想在其他地方拿到里面那个thumb 之前试了handleMessage也是 都传过来了 却不能用

 public void handleMessage(Message wxmsg) {
                    super.handleMessage(wxmsg);
                    switch (wxmsg.what) {
                        case 20:
                            //BitmapDrawable bd = (BitmapDrawable) drawableSharePic;
                            Log.i("Bitmap", "GET");
                            //msgthumbData = Util.bmpToByteArray((Bitmap) wxmsg.obj, true);
                            thumb = (Bitmap) wxmsg.obj;

                            msg.setThumbImage(thumb); //这里就不行了
                                   //在calss上将 thumb 设为public也不行

                            //thumbBmp = Bitmap.createScaledBitmap(thumb, WX_THUMB_SIZE, WX_THUMB_SIZE, true);
                            Log.i("Bitmap", "GET2");
                            //thumb.recycle();
                            break;
                    }
                }

mthumb = thumb //如何在外面 使用
 msg.setThumbImage(mthumb); 
jklwan 2016-04-22
  • 打赏
  • 举报
回复
…… 你是没理解怎么用啊。用AsyncTask做最简单。

public class DownLoad extends AsyncTask<String, Void, Drawable > {
    @Override
    protected String doInBackground(String... params) {
        Drawable drawable = null;
        try {
            drawable = Drawable.createFromStream(new URL(params[0]).openStream(), "share_reg.jpg");
        } catch (IOException e) {
        }
        if (drawable == null) {
            //如果没有成功从服务器获取图片 则用logo
            drawable = getResources().getDrawable(R.drawable.logo);
        }
        return drawable ;
    }

    @Override
    protected void onPostExecute(Drawable result) {
         BitmapDrawable bd = (BitmapDrawable) result;
       Bitmap thumb = bd.getBitmap();
       msg.setThumbImage(thumb);
     // 进行分享
    }
}
使用方式new DownLoad().execute(imageurl);
jklwan 2016-04-22
  • 打赏
  • 举报
回复
引用 6 楼 jklwan 的回复:
使用方式new DownLoad().execute(imageurl);
doInBackground前的String 改为Drawable
Amy安 2016-04-22
  • 打赏
  • 举报
回复
引用 4 楼 jklwan 的回复:
[quote=引用 3 楼 u014294325 的回复:]
求教要怎么做 最终要能将Drawable 给msg.thumbData 或者setThumbImage 为Bitmap thumb

这个具体可以去网上找代码,很多的。thread,asynctask等等[/quote]





我尝试这样 但是还不行 而且这里 两个drawable似乎不是一个 这里要怎么return子线程里面的drawable


这样的也试了
jklwan 2016-04-22
  • 打赏
  • 举报
回复
引用 3 楼 u014294325 的回复:
求教要怎么做 最终要能将Drawable 给msg.thumbData 或者setThumbImage 为Bitmap thumb
这个具体可以去网上找代码,很多的。thread,asynctask等等
Amy安 2016-04-22
  • 打赏
  • 举报
回复
引用 1 楼 jklwan 的回复:
网络请求要放到子线程中。
引用 2 楼 a631855639 的回复:
Caused by: android.os.NetworkOnMainThreadException 网络请求不能在主线程操作
求教要怎么做 最终要能将Drawable 给msg.thumbData 或者setThumbImage 为Bitmap thumb
jklwan 2016-04-21
  • 打赏
  • 举报
回复
网络请求要放到子线程中。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧