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

拖格斯·阿卡

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

DatabaseHelper类

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类

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();
    }

}

Liste型号类别

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;
    }
}
图尔汗·巴达洛夫(Turkhan Badalov)

为什么要手动创建数据库路径?您应该改为使用DatabaseHelpergetWritableDatabase()和的getReadableDatabase()方法,如官方手册中所述并写出更详细的信息,为什么您认为它没有放入数据库,也许您只是无法正确阅读?是否有任何错误或崩溃?但是首先尝试按照官方文档中的说明重写代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将新对象添加到现有实体,将数据放入数据中并让EF将其添加到我的数据库中?

我正在尝试将 Twilio 广播短信功能添加到我的 Django 应用程序中,但无法弄清楚如何检索所有数据库电话号码

如何将新的数据行添加到我的 Derby 数据库中?

如何使用laravel将表添加到我现有的数据库中?

如何将数据添加到Firestore数据库中的现有文档

如何将一些值添加到我的数据库中

在Android中安装应用程序后如何复制现有数据库

如何将数据库连接到我的Android应用程序?

如何将NullableBooleanField添加到现有的Django数据库中?

如何将标头添加到我从机器学习数据库中提取的以下数据中

如何将带有值的行添加到控制台应用程序中的现有数据表

如何将数组数据添加到 PHP 中的现有数组数据?

将实时数据库添加到我在 android studio 上的应用程序 - 无法解决:firebase-database-15.0.0

Android将表动态添加到资产文件夹中的现有数据库

如果数据库中已经存在索引,如何将索引添加到我的子弹中?

如何将Alertdialog添加到我的Android应用程序?

如何在Android应用程序中使用现有数据库

如何将包含数据库中数据的自定义表添加到 Oracle APEX 中的应用程序?

如何将flask-RBAC模型添加到现有SQLAlchemy数据库

如何将新的whosonfirst位置添加到现有的pelias数据库?

使用新的租户ID将的数据副本添加到现有数据库中

将库添加到我的应用程序

将数据库添加到Android应用程序

如何将 vuetify 对话框添加到现有应用程序中?

如何将 React 添加到现有的 Electron 应用程序中?

如何将MySQL数据库A的表中的行添加到数据库B中的现有表中

如何将记录添加到存储在我的数据库中的阵列上,而不是更新现有的轨道上的记录?

django将新的ManyToManyField添加到现有数据库

如何将ASP.NET MVC5身份验证添加到现有数据库