InputStream中导致R.raw.file的异常

时间:2016-01-25 17:11:24

标签: android exception resources inputstream

我有一个数据库,我想要执行SQL语句,即文件 但我在InputStream行上得到一个例外,我不知道为什么 请帮我解决这个问题。

package com.example.hasana.databases;

import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * Created by hasana on 1/14/2016.
 */
public class DatabaseHelper extends SQLiteOpenHelper implements BaseColumns {
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;
    public static final String CAT_NAME_COLUMN = "gruppa";
    public static final String PHONE_COLUMN = "name";
    public static final String AGE_COLUMN = "age";
    private static final String DATABASE_TABLE = "cats";
        Context mycont;
        String libraryPath;
        String sql;


    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
            mycont=context;
    }

    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("mytag", "readFile");
//        try {
//            insertFromFile(mycont,R.raw.sqlstat);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
        db.execSQL(sql);
    }
    /**
     * This reads a file from the given Resource-Id and calls every line of it as a SQL-Statement
     *
     * @param context
     *
     * @param resourceId
     *  e.g. R.raw.food_db
     *
     * @return Number of SQL-Statements run
     * @throws IOException
     */
    public void insertFromFile(Context context, int resourceId) throws IOException {

        // Open the resource
        InputStream insertsStream = context.getResources().openRawResource(resourceId);
        BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream));

        // Iterate through lines (assuming each insert has its own line and theres no other stuff)
        while (insertReader.ready()) {
            sql += insertReader.readLine();
        }
        insertReader.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // Запишем в журнал
        Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion);

        // Удаляем старую таблицу и создаём новую
        db.execSQL("DROP TABLE IF IT EXISTS " + DATABASE_TABLE);
        // Создаём новую таблицу
        onCreate(db);
    }

 }

但在InputStream insertsStream = context.getResources().openRawResource(resourceId);我得到了一个例外

  FATAL EXCEPTION: main         Process: com.example.hasana.databases, PID: 21716
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hasana.databases/com.example.hasana.databases.MainActivity}: java.lang.NullPointerException
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
                                                                              at android.app.ActivityThread.access$800(ActivityThread.java:135)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                              at android.os.Looper.loop(Looper.java:136)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5001)
                                                                              at java.lang.reflect.Method.invokeNative(Native Method)
                                                                              at java.lang.reflect.Method.invoke(Method.java:515)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                                              at dalvik.system.NativeStart.main(Native Method)
                                                                           Caused by: java.lang.NullPointerException
                                                                              at android.database.DatabaseUtils.getSqlStatementType(DatabaseUtils.java:1375)
                                                                              at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1659)
                                                                              at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
                                                                              at com.example.hasana.databases.DatabaseHelper.onCreate(DatabaseHelper.java:53)
                                                                              at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
                                                                              at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
                                                                              at com.example.hasana.databases.MainActivity.onCreate(MainActivity.java:23)
                                                                              at android.app.Activity.performCreate(Activity.java:5231)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
                                                                              at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                              at android.os.Looper.loop(Looper.java:136) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5001) 
                                                                              at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                              at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                                                                              at dalvik.system.NativeStart.main(Native Method) 

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。 问题是我有两个构造函数,我首先接收上下文但是调用第二个构造。我添加mycont = context;在第二个构造函数和它;它确定

image = Magick::Image.read(original_image_path).first
image.change_geometry!(@attributes['width']+"x"+
    @attributes['height']) { |cols, rows, img|
    newimg = img.resize(cols, rows)
    newimg.write(new_filename)
}