b_look 2013-06-07 15:24 采纳率: 0%
浏览 5873

无法执行 ImageView imageView = new ImageView(this);

我写的瀑布流显示图片

每次执行到Log.e("error","101成功压缩图片")这句就没办法执行了,下面是我的代码

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;

public class MainActivity extends Activity implements Runnable{

private final int NUM_OF_PIC = 30;  //每次请求获取的图片数量
private  LinearLayout linearLayout1 = null;
private  LinearLayout linearLayout2 = null;
private  LinearLayout linearLayout3 = null;
private  View scrollView = null;
public static int USE_LINEAR_INTERVAL = 0;
public static int linearlayoutWidth;
private byte[][] picBytes = new byte[NUM_OF_PIC][];
private int numOfPic = 0;//已加载的图片数量
private int index = 0; 
public static int requestTime = 0;
private PictureArrayOfBytes picArray ;

private Handler mHandler = new Handler(){  
    public void handleMessage(Message msg) {  
        switch (msg.what) {  
        case 1:   
          try {
            Log.e("error","39");
            addBitmaps();
            Log.e("error","41");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            break;  
        }  
    };  
};



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    linearLayout1 = (LinearLayout)findViewById(R.id.main_linearlayout1);
    linearLayout2 = (LinearLayout)findViewById(R.id.main_linearlayout2);
    linearLayout3 = (LinearLayout)findViewById(R.id.main_linearlayout3);
    linearlayoutWidth =  (int)(getWindowManager().getDefaultDisplay().getWidth()/3);
    Log.e("error","creat: " + String.valueOf(linearlayoutWidth));

    scrollView = findViewById(R.id.scroll);
    Log.e("error","61");
    final Thread thread = new Thread(new MainActivity());
    Log.e("error","65");
    thread.start();
    Log.e("error","67");
    Log.e("info", "context: "+(context == null));
    scrollView.setOnTouchListener(new OnTouchListener() {  
        @Override  
        public boolean onTouch(View v, MotionEvent event) {  
            switch (event.getAction()) {  
                case MotionEvent.ACTION_DOWN :  
                    break;  
                case MotionEvent.ACTION_MOVE :  
                    index++;  
                    break;  
                default :  
                    break;  
            }  
            if (event.getAction() == MotionEvent.ACTION_UP &&  index > 0) {  
                index = 0;  
                View view = ((ScrollView) v).getChildAt(0);  
                if (view.getMeasuredHeight() <= v.getScrollY() + v.getHeight()) {  
                    //加载数据代码  
                    //每次加载30张图片,一共加载5次
                        if (numOfPic >= NUM_OF_PIC){
                            numOfPic = 0;
                            thread.start();
                        }
                }  
            }  
            return false;  
        }  
    });  
    Log.e("error","90");
}



private void addBitmaps() throws Exception{
     Log.e("error","87:开始加载图片");


    for (int i = 0; i < NUM_OF_PIC; i++){
        Log.e("error","将图片数据转换成bitmap");

        Bitmap bitmap = BitmapFactory.decodeByteArray(picBytes[i], 0, picBytes[i].length);
        Log.e("error","改编图片的大小");
        Bitmap bitmap2 = BitmapZoom.bitmapZoomByWidth(bitmap, 240); //压缩图片大小
        Log.e("error","101成功压缩图片");
        Log.e("info", "context: "+(context == null));
        ImageView imageView = new ImageView(this);
        Log.e("error","103");
        imageView.setImageBitmap(bitmap);
        Log.e("error","105");
        //根据图片的大小,为图片挖坑
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(bitmap2.getWidth(), bitmap2.getHeight());
        //将坑和图片对象联系起来
        Log.e("error","109");
        imageView.setLayoutParams(layoutParams);
        Log.e("error","111");
        //按照顺序加载图片
        switch (USE_LINEAR_INTERVAL) 
        {
            case 0:
                linearLayout1.addView(imageView);
                numOfPic++;
                break;
            case 1:
                linearLayout2.addView(imageView);
                numOfPic++;
                break;
            case 2:
                linearLayout3.addView(imageView);
                numOfPic++;
                break;
            default:
                break;
        }
        USE_LINEAR_INTERVAL++;
        USE_LINEAR_INTERVAL= USE_LINEAR_INTERVAL%3;
    }
}
@Override
public void run() {
    // TODO Auto-generated method stub
    try {
        requestTime++;
        picArray = new PictureArrayOfBytes(requestTime);
        picBytes = picArray.getPicByteArray();
        Message message = new Message();  
        message.what = 1;  
        Log.e("error","153");
        mHandler.sendMessage(message);  
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

下面是我的logcat中的信息:

06-07 15:08:39.146: D/dalvikvm(2418): GC_CONCURRENT freed 292K, 4% free 13039K/13511K, paused 6ms+6ms
06-07 15:08:46.238: E/error(2418): 153
06-07 15:08:46.238: E/error(2418): 39
06-07 15:08:46.238: E/error(2418): 87:开始加载图片
06-07 15:08:46.238: E/error(2418): 将图片数据转换成bitmap
06-07 15:08:46.315: D/dalvikvm(2418): GC_FOR_ALLOC freed 252K, 4% free 13084K/13575K, paused 76ms
06-07 15:08:46.315: I/dalvikvm-heap(2418): Grow heap (frag case) to 12.987MB for 160016-byte allocation
06-07 15:08:46.498: D/dalvikvm(2418): GC_FOR_ALLOC freed 06-07 15:08:46.498: E/error(2418): 改编图片的大小
06-07 15:08:46.566: D/dalvikvm(2418): GC_FOR_ALLOC freed 27K, 5% free 13214K/13767K, paused 66ms
06-07 15:08:46.575: I/dalvikvm-heap(2418): Grow heap (frag case) to 13.181MB for 230416-byte allocation
06-07 15:08:46.635: D/dalvikvm(2418): GC_FOR_ALLOC freed 0K, 5% free 13439K/14023K, paused 60ms
**06-07 15:08:46.645: E/error(2418): 101成功压缩图片
06-07 15:08:46.655: W/System.err(2418): java.lang.NullPointerException**
06-07 15:08:46.685: W/System.err(2418):at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
06-07 15:08:46.685: W/System.err(2418): at android.view.View.(View.java:2696)
06-07 15:08:46.685: W/System.err(2418): at android.widget.ImageView.(ImageView.java:104)
06-07 15:08:46.685: W/System.err(2418): at com.example.mywaterfallversion2.MainActivity.addBitmaps(MainActivity.java:113)
06-07 15:08:46.685: W/System.err(2418): at com.example.mywaterfallversion2.MainActivity.access$0(MainActivity.java:101)
06-07 15:08:46.698: W/System.err(2418): at com.example.mywaterfallversion2.MainActivity$1.handleMessage(MainActivity.java:39)
06-07 15:08:46.698: W/System.err(2418): at android.os.Handler.dispatchMessage(Handler.java:99)
06-07 15:08:46.698: W/System.err(2418): at android.os.Looper.loop(Looper.java:137)
06-07 15:08:46.698: W/System.err(2418): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-07 15:08:46.698: W/System.err(2418): at java.lang.reflect.Method.invokeNative(Native Method)
06-07 15:08:46.706: W/System.err(2418): at java.lang.reflect.Method.invoke(Method.java:511)
06-07 15:08:46.706: W/System.err(2418): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-07 15:08:46.706: W/System.err(2418): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-07 15:08:46.706: W/System.err(2418): at dalvik.system.NativeStart.main(Native Method)

  • 写回答

2条回答

  • JaveZh 2013-06-08 01:07
    关注

    你的context申明在哪里???

    评论

报告相同问题?

悬赏问题

  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。