如何在我的Android应用程序中将数据添加到现有数据库?

时间:2016-08-18 11:53:47

标签: android database web-services sqlite android-studio

我们使用Web服务创建了一个应用程序。我们的数据类型是json。 Android应用程序可以从IP地址服务器获取数据。  但它们并没有出现在数据库中。我们该如何解决?我们的代码如下。

DatabaseHelper Class

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;

public class DatabaseHelper extends SQLiteOpenHelper {

        String DB_PATH = null;
        private static String DB_NAME = "bosdata.db";
        private SQLiteDatabase myDataBase;
        private final Context myContext;

        public DatabaseHelper(Context context) {
           super(context, DB_NAME, null, 10);
            this.myContext = context;
           this.DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/";
            //Log.e("Path 1", DB_PATH);
        }
    //
    //
        public void createDataBase() throws IOException {
            boolean dbExist = checkDataBase();
            if (dbExist) {
            } else {
                this.getReadableDatabase();
                try {
                    copyDataBase();
                } catch (IOException e) {
                    throw new Error("Error copying database");
                }
            }
        }

        private boolean checkDataBase() {
            SQLiteDatabase checkDB = null;
            try {
                String myPath = DB_PATH + DB_NAME;
                checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
            } catch (SQLiteException e) {
            }
            if (checkDB != null) {
                checkDB.close();
            }
            return checkDB != null ? true : false;
        }

        private void copyDataBase() throws IOException {
            InputStream myInput = myContext.getAssets().open(DB_NAME);
            String outFileName = DB_PATH + DB_NAME;
            OutputStream myOutput = new FileOutputStream(outFileName);
            byte[] buffer = new byte[10];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }
            myOutput.flush();
            myOutput.close();
            myInput.close();

        }

        public void openDataBase() throws SQLException {
            String myPath = DB_PATH + DB_NAME;
            myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

        }

        @Override
        public synchronized void close() {
            if (myDataBase != null)
                myDataBase.close();
            super.close();
        }


        @Override
        public void onCreate(SQLiteDatabase db) {
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            if (newVersion > oldVersion)
                try {
                    copyDataBase();
                } catch (IOException e) {
                    e.printStackTrace();

                }
        }

        public ArrayList<Liste_Model> get_All_Parts() {
            openDataBase();
            ArrayList<Liste_Model> arr = new ArrayList<Liste_Model>();


            Cursor c = myDataBase.query("db4OptimumOptimumSiraliRota", null, null, null, null, null, null);
            if (c != null) {
                if (c.moveToNext()) {
                    do {
                        Liste_Model model = new Liste_Model();
                        model.setResim_No(c.getString(0));
                        model.setKasa_Yeri(c.getString(1));
                        model.setAraba_Bolme_Yeri(c.getString(2));
                        arr.add(model);
                    } while (c.moveToNext());
                }
            }
            c.close();
            myDataBase.close();
            return arr;
        }

        public void add_SiraliListe(Liste_Model model) {
    SQLiteDatabase myDataBase = this.getWritableDatabase();
            openDataBase();

            ContentValues values = new ContentValues();
            values.put("ResimNo", model.getResim_No().toString());
            values.put("KasaYeri", model.getKasa_Yeri().toString());
            values.put("ArabaBolmeYeri", model.getAraba_Bolme_Yeri().toString());
            myDataBase.insertOrThrow("db4OptimumOptimumSiraliRota", null, values);


            myDataBase.close();

MainActivity Class

public class MainActivity extends AppCompatActivity implements OnClickListener {

    Button bSorgula;
    String resimno= "";
    String kasayeri = "";
    String arababolmeyeri = "";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bSorgula = (Button) findViewById(R.id.bSorgula);
        bSorgula.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        new myAsyncTask("Yükleniyor").execute();
    }

    private class myAsyncTask extends AsyncTask<Void, Void, Void> {

        String modalMesaj;
        ProgressDialog dialog;

        JSONObject jsonObject = null;

        public myAsyncTask(String mMesaj) {
            this.modalMesaj = mMesaj;
            this.dialog = new ProgressDialog(MainActivity.this);
        }

        @Override
        protected void onPreExecute() {
            dialog.setMessage(modalMesaj);
            dialog.setIndeterminate(true);
            dialog.setCancelable(false);
            dialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {



            String url = "http://192.168.163.1:8097/Products.aspx";

            HttpClient httpclient = new DefaultHttpClient();

            HttpGet httpget = new HttpGet(url);

            HttpResponse response;
            try {
                response = httpclient.execute(httpget);

                HttpEntity entity = response.getEntity();

                if (entity != null) {
                    InputStream instream = entity.getContent();
                    String result = convertStreamToString(instream);

                    JSONArray arr = new JSONArray(result);
                    List<String> Liste_Model = new ArrayList<String>();
                    DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this);
                    for(int i = 0; i < arr.length(); i++){
                        Liste_Model.add(arr.getJSONObject(i).getString("ResimNo"));
                        Liste_Model.add(arr.getJSONObject(i).getString("KasaYeri"));
                        Liste_Model.add(arr.getJSONObject(i).getString("ArabaBolmeYeri"));

                        Liste_Model model = new Liste_Model();

                        try {
                            databaseHelper.createDataBase();
                            model.setResim_No(arr.getJSONObject(i).getString("ResimNo"));
                            model.setKasa_Yeri(arr.getJSONObject(i).getString("KasaYeri"));
                            model.setAraba_Bolme_Yeri(arr.getJSONObject(i).getString("ArabaBolmeYeri"));

                            databaseHelper.add_SiraliListe(model);
                        } catch (IOException e) {
                            e.printStackTrace();

                        }
                    }



                    instream.close();
                }

            } catch (ClientProtocolException e) {
                Mesaj(e.getMessage());
            } catch (IOException e) {
                Mesaj(e.getMessage());
            } catch (JSONException e) {
                Mesaj(e.getMessage());
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void str) {

            if (dialog.isShowing())
                dialog.dismiss();


        }
    }

    private static String convertStreamToString(InputStream is) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line ;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

    private void Mesaj(String s) {

        Toast.makeText(this, s, Toast.LENGTH_LONG).show();
    }

}

听力模型类

public class Liste_Model {
    private String Resim_No;
    private String Kasa_Yeri;
    private String Araba_Bolme_Yeri;

    public String getResim_No() {
        return Resim_No;
    }

    public void setResim_No(String resim_No) {
        Resim_No = resim_No;
    }

    public String getKasa_Yeri() {
        return Kasa_Yeri;
    }

    public void setKasa_Yeri(String kasa_Yeri) {
        Kasa_Yeri = kasa_Yeri;
    }

    public String getAraba_Bolme_Yeri() {
        return Araba_Bolme_Yeri;
    }

    public void setAraba_Bolme_Yeri(String araba_Bolme_Yeri) {
        Araba_Bolme_Yeri = araba_Bolme_Yeri;
    }
}

1 个答案:

答案 0 :(得分:1)

为什么要手动创建数据库的路径?您应该使用DatabaseHelper的getWritableDatabase()getReadableDatabase()方法,如official manual中所述。并写出更详细的信息为什么你认为它没有放入数据库,也许你只是无法正确读取它?有没有错误或崩溃?但首先尝试重写代码,因为它是在官方文档中给出的。