我尝试下载服务器上的数据,将其插入我的SQLITE数据库中,从该表中获取一个值,然后查询服务器以从另一个表中获取数据。 在这里,我向您展示代码。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bills);
ImageView search = findViewById(R.id.iv_search);
facturaId = findViewById(R.id.et_facturaid);
mContext = getApplicationContext();
activity = this;
database = AppDatabase.getAppDatabase(getApplicationContext());
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(() -> {
// Code here
getVenta(facturaId.getText().toString());
}).start();
new Thread(() -> {
// Code here
getVentaD(String.valueOf(database.ventaDao().getVenta().getID()));
}).start();
}
});
}
//Method1
public void getVenta(final String id) {
new Thread(() -> {
// Code here
database.ventaDao().deleteVenta();
}).start();
final String link = AppConfig.getVenta() + "/"+ id;
StringRequest postRequest = new StringRequest(Request.Method.GET, link,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Log.d("Response", response);
if (!response.equals("") && !response.equals("null") && !response.equals("[]")) {
try {
final JSONArray array = new JSONArray(response);
if (array.length() > 0) {
for (int i = 0; i < array.length(); i++) {
final JSONObject object = array.getJSONObject(i);
try {
AsyncTask.execute(new Runnable() {
@Override
public void run() {
database.runInTransaction(() ->{
try {
database.ventaDao().addVenta(new Venta(
object.getInt("ID"),
object.getString("Empresa"),
object.getString("Mov"),
object.getString("MovID"),
object.getString("FechaEmision"),
object.getString("Concepto"),
object.getString("Usuario"),
object.getString("Proyecto"),
object.getString("ClienteID"),
object.getInt("EnviarA"),
object.getString("Agente"),
object.getString("Condicion"),
object.getInt("Sucursal"),
object.getDouble("Importe")));
} catch (JSONException e) {
e.printStackTrace();
}
});
}
});
} catch (Exception ex) {
Log.e("", "error3 => " + ex.toString());
}
}
Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_LONG).show();
}
} catch (Exception ex) {
Toast.makeText(getApplicationContext(), "error1 => " + ex.toString(), Toast.LENGTH_LONG).show();
Log.e("", "error1 => " + ex.toString());
}
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "error => " + error.toString(), Toast.LENGTH_LONG).show();
Log.e("", "error => " + error.toString());
}
}
) {//here before semicolon ; and use { }.
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
final String token = "Bearer " + "dd";
headers.put("Content-Type", "application/json");
headers.put("Authorization", token);
return super.getHeaders();
}
@Override
public String getBodyContentType() {
return super.getBodyContentType();
}
};
postRequest.setRetryPolicy(new DefaultRetryPolicy(
40000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
VolleySingleton.getInstance(getApplicationContext()).addToRequestque(postRequest);
}
//Method2
public void getVentaD(final String id) {
new Thread(() -> {
// Code here
database.ventaDDao().deleteVentaD();
}).start();
final String link = AppConfig.getVentaD() + "/"+ id;
StringRequest postRequest = new StringRequest(Request.Method.GET, link,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Log.d("Response", response);
if (!response.equals("") && !response.equals("null") && !response.equals("[]")) {
try {
final JSONArray array = new JSONArray(response);
if (array.length() > 0) {
for (int i = 0; i < array.length(); i++) {
final JSONObject object = array.getJSONObject(i);
try {
AsyncTask.execute(new Runnable() {
@Override
public void run() {
database.runInTransaction(() -> {
try {
database.ventaDDao().addVentaD(new VentaD(
object.getInt("ID"),
object.getString("Almacen"),
object.getString("Articulo"),
object.getDouble("Precio"),
object.getDouble("PrecioSugerido"),
object.getDouble("Costo"),
object.getString("Unidad"),
object.getDouble("Cantidad"),
object.getDouble("CantidadInventario"),
object.getString("Agente"),
object.getInt("EnviarA"),
object.getDouble("UltimoCosto"),
object.getDouble("Preciolista")));
} catch (JSONException e) {
e.printStackTrace();
}
});
}
});
} catch (Exception ex) {
Log.e("", "error3 => " + ex.toString());
}
}
Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_LONG).show();
}
} catch (Exception ex) {
Toast.makeText(getApplicationContext(), "error1 => " + ex.toString(), Toast.LENGTH_LONG).show();
Log.e("", "error1 => " + ex.toString());
}
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "error => " + error.toString(), Toast.LENGTH_LONG).show();
Log.e("", "error => " + error.toString());
}
}
) {//here before semicolon ; and use { }.
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
final String token = "Bearer " + "dd";
headers.put("Content-Type", "application/json");
headers.put("Authorization", token);
return super.getHeaders();
}
@Override
public String getBodyContentType() {
return super.getBodyContentType();
}
};
postRequest.setRetryPolicy(new DefaultRetryPolicy(
40000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
VolleySingleton.getInstance(getApplicationContext()).addToRequestque(postRequest);
}
---------崩溃开始 facturasapp E / Android运行时:致命例外:线程8 流程:facturasapp,PID:24606 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'int facturasapp.data.models.Venta.getID()' 在facturasapp.activity.user.BillsActivity $ 1.lambda $ onClick $ 1 $ BillsActivity $ 1(BillsActivity.java:83)处 at facturasapp.activity.user.BillsActivity $ 1 $$ Lambda $ 1.run(来源不明) 在java.lang.Thread.run(Thread.java:762)
我注意到,当我尝试查询第一个表的ID时,尚未将其插入,因此给我带来了一个空答案。我该如何做(如果可能的话),以便能够插入然后查询以获取需要查询同一代码块中第二个表的值?
谢谢...