我似乎在我的程序中找不到错误,在 eclipse 中它说我的 jpeg回调无法解决?



我正在处理这段代码,在我的第一个。java文件中,我得到了一个错误的箭头,它说jpegcallback无法解决,但它在那里定义得很清楚。我一直在计算结束},我在最后一行得到一个错误,说没有足够的,我计数过多吗?

 package com.example;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import android.app.Activity;
 import android.hardware.Camera;
 import android.hardware.Camera.PictureCallback;
 import android.hardware.Camera.ShutterCallback;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.FrameLayout;
 import android.speech.*;

public class CameraDemo extends Activity {
private static final String TAG = "CameraDemo";
Camera camera;
Preview preview;
Button buttonClick;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    preview = new Preview(this);
    ((FrameLayout) findViewById(R.id.preview)).addView(preview);
    buttonClick = (Button) findViewById(R.id.buttonClick);
    buttonClick.setOnClickListener( new OnClickListener() 
    {
        public void onClick(View v) 
        {
--------->              preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    });
    Log.d(TAG, "onCreate'd");
}

ShutterCallback shutterCallback = new ShutterCallback() 
{
    public void onShutter() 
    {
        Log.d(TAG, "onShutter'd");
    }
};
/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        Log.d(TAG, "onPictureTaken - raw");
    }
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        FileOutputStream outStream = null;
        try 
        {
                // write to local sandbox file system
 //         
            outStream = CameraDemo.this.openFileOutput      (String.format      ("%     d.jpg", System.currentTimeMillis()), 0);    
            // Or write to sdcard
            outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
            outStream.write(data);
            outStream.close();
            Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
        } 
        catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        } 
        finally 
        {
        }
        Log.d(TAG, "onPictureTaken - jpeg");
    }
    @Override 
    protected void 
            onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) 
        { 
            if (resultCode == RESULT_OK) 
            { 
                List<String> heard = 
                        data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
                for (int i = 0; i < heard.size(); i++) 
                { 
                    Log.d(TAG, i + ": " + heard.get(i)); 
                } 
                receiveWhatWasHeard(heard); 
            } 
            else 
            { 
//fail 
            } 
        } 
        super.onActivityResult(requestCode, resultCode, data); 
    } 
};
protected void receiveWhatWasHeard(List<String> heard) 
{ 
    WordDictionary command = new WordDictionary("Add"); 
    for (String said : heard) 
    { 
        if (command.isIn(said.split("\s"))) 
        { 
            Log.d(TAG, "heard add"); 
        } 
    } 
} 

public class WordDictionary 
{ 
    private Set<String> words; 
    public WordDictionary(String... wordsIn) 
    { 
        this(Arrays.asList(wordsIn)); 
    } 
    public WordDictionary(List<String> wordsIn) 
    { 
        words = new LinkedHashSet<String>(wordsIn); 
    } 
    public Set<String> getWords() 
    { 
        return words; 
    } 
    public boolean isIn(String word) 
    { 
        return words.contains(word); 
    } 
    public boolean isIn(String [] wordsIn) 
    { 
        boolean wordIn = false; 
        for (String word : wordsIn) 
        { 
            if (isIn(word)) 
            { 
                wordIn = true; 
                break; 
            } 
        } 
        return wordIn; 
        }
}
preview.java
package com.example;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

class Preview extends SurfaceView implements SurfaceHolder.Callback {
 private static final String TAG = "Preview";
SurfaceHolder mHolder;
public Camera camera;
Preview(Context context) {
    super(context);
    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it where
    // to draw.
    camera = Camera.open();
    try {
        camera.setPreviewDisplay(holder);

        camera.setPreviewCallback(new PreviewCallback() {
            public void onPreviewFrame(byte[] data, Camera arg1) {
                FileOutputStream outStream = null;
                try {
                    outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
                    outStream.write(data);
                    outStream.close();
                    Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                }
                    Preview.this.invalidate();
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public void surfaceDestroyed(SurfaceHolder holder) {
    // Surface will be destroyed when we return, so stop the preview.
    // Because the CameraDevice object is not a shared resource, it's very
    // important to release it when the activity is paused.
    camera.stopPreview();
    camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // Now that the size is known, set up the camera parameters and begin
    // the preview.
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPreviewSize(w, h);
    camera.setParameters(parameters);
    camera.startPreview();
}
@Override
public void draw(Canvas canvas) {
        super.draw(canvas);
        Paint p= new Paint(Color.RED);
        Log.d(TAG,"draw");
        canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p );
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/layout">
<TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:text="VoCam"
    android:textSize="24sp" />
<FrameLayout android:id="@+id/preview"
    android:layout_weight="1" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</FrameLayout>
<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/buttonClick"
    android:text="Listening" android:layout_gravity="center"></Button>
</LinearLayout>
manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".CameraDemo" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.CAMERA" />
</manifest> 

看起来你在rawCallBack上没有右括号,所以它有点"消耗"jpeg回调(参见INSERT大括号)

/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        Log.d(TAG, "onPictureTaken - raw");
    }
}; <-------------INSERT BRACE HERE
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        FileOutputStream outStream = null;
        try 
        {
                // write to local sandbox file system
 //         
            outStream = CameraDemo.this.openFileOutput      (String.format      ("%     d.jpg", System.currentTimeMillis()), 0);    
            // Or write to sdcard

在你的声明PictureCallback rawCallBack,似乎你错过了一个闭括号(})之后的onPictureTaken方法。

你想要关闭这里的}:

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback()  {  
    public void onPictureTaken(byte[] data, Camera camera) { 
     Log.d(TAG, "onPictureTaken - raw");
     } 
}  //---------------------in this line :)!---------------

最新更新