我们使用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;
}
}
答案 0 :(得分:1)
为什么要手动创建数据库的路径?您应该使用DatabaseHelper的getWritableDatabase()
和getReadableDatabase()
方法,如official manual中所述。并写出更详细的信息为什么你认为它没有放入数据库,也许你只是无法正确读取它?有没有错误或崩溃?但首先尝试重写代码,因为它是在官方文档中给出的。