Я пытаюсь загрузить данные, находящиеся на сервере, вставить их в базу данных 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 / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: Thread-8
Процесс: facturasapp, PID: 24606
java.lang.NullPointerException: попытка вызвать виртуальный метод int facturasapp.data.models.Venta.getID () для нулевой ссылки на объект
at facturasapp.activity.user.BillsActivity $ 1.lambda $ onClick $ 1 $ BillsActivity $ 1 (BillsActivity.java:83)
at facturasapp.activity.user.BillsActivity $ 1 $$ Lambda $ 1.run (неизвестный источник)
at java.lang.Thread.run (Thread.java:762)
Я замечаю, что когда я пытаюсь запросить идентификатор первой таблицы, она еще не была вставлена, и поэтому она дает мне нулевой ответ. Как мне сделать (если это возможно), чтобы иметь возможность вставить, а затем обратиться, чтобы получить значение, которое мне нужно, чтобы обратиться ко второй таблице в том же блоке кода?
Спасибо ...