a179583637 2016-06-28 04:10 采纳率: 0%
浏览 1368

从网络取数据(bitmap的图片和文字)显示到布局中(重写了simpleadapter还是不能显示

package textview.exam;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.baidu.apistore.sdk.ApiCallBack;
import com.baidu.apistore.sdk.ApiStoreSDK;
import com.baidu.apistore.sdk.network.Parameters;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FragmentMainchatnews extends Fragment {
private List list;
private MyListView lv;
private LvAdapter adapter;
private String urlString;
Handler handler1;
int return_count;
List> listItemx = new ArrayList>();
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.main_chat_news, null);
    final Thread thread=new Thread(runnable);
    thread.start();
    lv = (MyListView) view.findViewById(R.id.chat_news);
    lv.setonRefreshListener(new MyListView.OnRefreshListener() {
        @Override
        public void onRefresh() {
            new AsyncTask<Void, Void, Void>() {
                protected Void doInBackground(Void... params) {
                    try {
                        Thread.sleep(2000);
                        thread.start();
                    } catch (Exception e) {
                        Toast toast = Toast.makeText(getActivity(), "网络连接失败,请重试",Toast.LENGTH_SHORT);
                        //屏幕上方显示,X轴和Y轴偏移量都是0
                        toast.setGravity(Gravity.TOP, 0, 0);
                        toast.show();
                    }

                    return null;
                }

                @Override
                protected void onPostExecute(Void result) {
                    //adapter.notifyDataSetChanged();
                    lv.onRefreshComplete();
                }
            }.execute(null, null, null);
        }
    });
    //adapter = new LvAdapter(lv,this);
    lv.setAdapter(adapter);
    return view;
}
//创建Hander对象,用于接收子线程接收到的数据
Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        if (msg.arg1 == 0X456) {
            listItemx= (List<Map<String, Object>>) msg.obj;
            // 创建一个SimpleAdapter实现界面的更新
            SimpleAdapter simpleAdapter = new SimpleAdapter(getActivity(), listItemx, R.layout.news_simple_item,
                    new String[]{"image", "title", "abs"},
                    new int[]{R.id.image, R.id.title, R.id.abs});
            simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {
                @Override
                public boolean setViewValue(View view, Object data,
                                            String textRepresentation) {
                    // TODO Auto-generated method stub
                    if ((view instanceof ImageView) && (data instanceof Bitmap)) {
                            ImageView vi = (ImageView) view;
                            vi.setImageBitmap((Bitmap) data);
                        Log.i("我是", "二蛋");
                        return true;

                    }
                    Log.i("我是", "sadasd");
                    return false;

                }
            });
            ListView list = (ListView) getView().findViewById(R.id.chat_news);
            // 为ListView设置Adapter
            list.setAdapter(simpleAdapter);
            //动态更新ListView
            simpleAdapter.notifyDataSetChanged();
        }
    }

    ;
};
//开启子线程得到数据
private Runnable runnable= new Runnable() {
    public void run() {
        final Message message = handler.obtainMessage();
        Parameters para = new Parameters();
        Log.i("尼玛","1");
        para.put("keyword", "娱乐");
        para.put("page","3");
        ApiStoreSDK.execute("http://apis.baidu.com/songshuxiansheng/real_time/search_news",
                ApiStoreSDK.GET,
                para,
                new ApiCallBack() {
                    @Override
                    public void onSuccess(int status, String responseString) {
                        Log.i("连接状态", "连接成功");

                        try {
                            final Bitmap[] bitmap1 = new Bitmap[100];
                            JSONObject  dataJson=new JSONObject(responseString);
                            JSONObject  retData=dataJson.getJSONObject("retData");
                            JSONArray data=retData.getJSONArray("data");
                            int return_count=retData.getInt("return_count");
                            List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
                            // 创建一个List集合,List集合的元素是Map
                            for (int i=0; i < return_count; i++) {
                                JSONObject info = data.getJSONObject(i);
                                Map<String, Object> listItem = new HashMap<String, Object>();
                                urlString=info.getString("img_url");
                                Thread thread1=new Thread(runnable1);
                                thread1.start();
                                //创建Hander对象,用于接收子线程的图片
                                final int finalI = i;
                                handler1 = new Handler() {
                                    public void handleMessage(android.os.Message msg) {
                                        if (msg.arg1 == 0X123) {
                                            Log.i("我爱","你");
                                            bitmap1[finalI] =(Bitmap) msg.obj;
                                        }
                                    }
                                };
                                listItem.put("title", info.getString("title"));
                                listItem.put("image", bitmap1[finalI]);
                                listItem.put("abs", info.getString("abstract"));
                                listItems.add(listItem);

                            }
                            message.obj = listItems;
                            //定义标识子线程
                            message.arg1 = 0X456;
                            handler.sendMessage(message);
                            Log.i("循环"+0,"次");

                        } catch (JSONException e) {
                            Log.i("获取到数据:", responseString);
                        }
                    }

                    @Override
                    public void onComplete() {
                        Log.i("sdkdemo", "onComplete");
                    }

                    @Override
                    public void onError(int status, String responseString, Exception e) {
                        Log.i("sdkdemo", "onError, status: " + status);
                        Log.i("sdkdemo", "errMsg: " + (e == null ? "" : e.getMessage()));
                    }

                });

    }
};
//开启另子线程得到图片
Runnable runnable1= new Runnable() {
    public void run() {
        final Message message = handler.obtainMessage();
        //获取网络图片
        URL url;
        Bitmap bitmap = null;

        try {
            url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(6000);
            connection.setDoInput(true);
            connection.setUseCaches(true);

            InputStream is = connection.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        message.obj = bitmap;
        //定义标识子线程
        message.arg1 =0X123;
        handler1.sendMessage(message);
    }


};

}
我全部代码,用到了两个线程,逻辑应该没有问题的,可是还是不对劲

  • 写回答

2条回答 默认 最新

  • zhang106209 2016-06-28 06:19
    关注

    一般不是用baseAdapter吗?你的数据能够拿到吗?

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧