【发布时间】:2017-11-26 11:06:49
【问题描述】:
我制作了一个扫描二维码的应用。我希望将从二维码扫描的数据(将是 2300、2301、2302 之类的数字)与 sqlite 数据库中名为 ID 的列进行比较。 sqlite 数据库中列 ID 的一些值是 2301、2302、2303。我希望将扫描的数据与 ID 中的值进行比较,如果它们匹配,则执行操作。如果不是,将显示错误消息。如果二维码的值为 2301,则执行该操作。如果是 8900(数据库中没有的数字),它会显示一条消息:找不到学生。我还想澄清一下,scannedData 没有被输入到 sqlite 数据库中,而是被发送到谷歌脚本链接。 sqlite 数据库包含一个学生列表。我希望如果扫描的数据与 sqlite 数据库中的 nay ID 不相似,那么 sannedData 将不会被发送到谷歌应用脚本目标。 这是我的活动 DatabaseHelper 的数据库代码
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Student.db";
public static final String TABLE_NAME = "student_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "NAME";
public static final String COL_3 = "SURNAME";
public static final String COL_4 = "MARKS";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME +" (ID INT PRIMARY KEY UNIQUE,NAME TEXT,SURNAME TEXT,MARKS TEXT)");
}
下面是我要修改以检查它是否在数据库中的代码。这是另一个名为 MainActivity 的活动。
public class ArrivalTime extends AppCompatActivity {
String scannedData;
Button scanBtn;
//-----------------------------------------------------------
//DatabaseHelper myDb;
//------------------------------------------------------------
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_arrival_time);
final Activity activity = this;
scanBtn = (Button) findViewById(R.id.scan_btn);
//-------------------------------------------------------
// myDb = new DatabaseHelper(this);
//---------------------------------------------------------
scanBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
IntentIntegrator integrator = new IntentIntegrator(activity);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
integrator.setPrompt("Place barcode in window to Scan it");
integrator.setBeepEnabled(true);
integrator.setCameraId(0);
integrator.setBarcodeImageEnabled(false);
integrator.initiateScan();
}
});
}
//-----------------------------------------------------------------------------------------
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result= IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
if(result!=null){
scannedData = result.getContents();
if(scannedData != null){
// here we need to handle scanned data
// Cursor c = myDb.getId(String);
// if(c.getCount() == 0) {
// show message
// Toast.makeText(ArrivalTime.this,"Student doesn't exist in database",Toast.LENGTH_LONG).show();
// return;
//}
new SendRequest().execute();
}
else{
}
}
super.onActivityResult(requestCode, resultCode, data);
}
//-----------------------------------------------------------------------------------------
public class SendRequest extends AsyncTask<String, Void, String>{
protected void onPreExecute(){}
protected String doInBackground(String... arg0){
try{
URL url = new URL("https://script.google.com/macros/s/ttttttttttttttttttttttttttttttttttttttttttttt/exec");
JSONObject postDataParams = new JSONObject();
postDataParams.put("sdata",scannedData);
Log.e("params", postDataParams.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode=conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer("");
String line="";
while((line = in.readLine()) != null) {
sb.append(line);
break;
}
in.close();
return sb.toString();
}
else {
return new String("false : "+responseCode);
}
}
catch(Exception e){
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(getApplicationContext(), result,
Toast.LENGTH_LONG).show();
}
}
public String getPostDataString(JSONObject params) throws Exception {
StringBuilder result = new StringBuilder();
boolean first = true;
Iterator<String> itr = params.keys();
while(itr.hasNext()){
String key= itr.next();
Object value = params.get(key);
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(key, "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(value.toString(), "UTF-8"));
}
return result.toString();
}
//-----------------------------------------------------------------------------------------
我希望该函数检查扫描的数据是否不为空并且它是否存在于数据库中。我试着做 if(scannedData != null && mapped==id) 但我不确定如何从另一个活动中调用数据库数据并执行比较
我在下面给出了一个示例,但它假设我正在检查是否存在与已扫描的值相似的值,以便可以将其输入到我不想要的 sqlite 数据库中。
任何建议。
【问题讨论】:
-
我认为您想使用 ID 列检查数据..
-
是的。这就是我想做的事
-
好的,检查答案。如果数据存在 ti 将返回 true。
-
你完成了吗?我已经更新了一些代码..请检查..
-
如果你觉得有什么问题可以问我...
标签: android sqlite android-sqlite qr-code