abrufen Ich arbeite an einer Anwendung, die Daten aus der Online-MySQL-Datenbank abrufen und als Liste im Aktivitätslayout anzeigen muss.Daten aus der Online MySQL DB in der "onCreate" -Methode der Aktivität
Problem ist, dass meine Anwendungsfehler „Versuch, Interface-Methode‚int java.util.List.size()‘auf ein Null-Objekt Verweis aufrufen“ wird die
In onCreate Methode Ich rufe AsyncTask Klasse zu erhalten Daten vom Server und als unterhalb dieser Linie des Codes ich setze diese Daten durch Adapter zur Listenansicht, die mein Layout ist. Wenn ich diese Aktivität starte, erhalte ich den Fehler.
Sollte ich die Daten vom Server vor dem Start der Aktivität erhalten? Oder das Problem ist etwas anderes? Meine PHP-Datei funktioniert in Ordnung, wenn ich es im Browser überprüfen.
ist hier onCreate Methode:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.invoice_list);
final ListView listView1 = (ListView) findViewById(R.id.invoicelist);
InvoiceDownloader task = new InvoiceDownloader();
task.execute(new String[] { "http://10.0.2.2/company/getinvoices.php" });
ArrayAdapter<Invoice> adapter = new ArrayAdapter<Invoice>(this, android.R.layout.simple_list_item_1, invoices);
listView1.setAdapter(adapter);
}
EDIT:
ich es fest, wie Sie alle, schlug nun kein Fehler, Aktivität öffnet, aber es zeigt immer noch keine Daten von Online Datenbank .. hier bearbeitet onCreate() -Methode:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.invoice_list);
adapter = new ArrayAdapter<Invoice>(this, android.R.layout.simple_list_item_1);
listView1 = (ListView) findViewById(R.id.invoicelist);
InvoiceDownloader task = new InvoiceDownloader();
task.execute(new String[] { "http://10.0.2.2/company/getinvoices.php" });
adapter.notifyDataSetChanged();
}
und hier ist AsyncTask Klasse:
public class InvoiceDownloader extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String response = "";
try {
response += getHttpContent(params[0]);
} catch (IOException e) {
Log.e("error", e.toString());
}
return response;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
adapter.addAll(invoices);
listView1.setAdapter(adapter);
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
}
public String getHttpContent(String urlStr) throws IOException {
String response = "";
try {
URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
StringBuilder sb = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json + "\n");
}
JSONArray jsonArray = new JSONArray(sb.toString().trim());
for (int i = 0; i < jsonArray.length(); i++) {
Invoice invoice = new Invoice();
JSONObject inv = jsonArray.getJSONObject(i);
String companyNameOne = inv.getString("companyNameOne");
String companyNameTwo = inv.getString("companyNameTwo");
String address = inv.getString("address");
String postalCode = inv.getString("postalCode");
String city = inv.getString("city");
String oib = inv.getString("oib");
String email = inv.getString("email");
int comple = inv.getInt("completed");
String completed = String.valueOf(comple);
String workOrderNumber = inv.getString("workOrderNumber");
String price = inv.getString("price");
System.out.println("Company Name 1: " + companyNameOne + " Company Name 2: " + companyNameTwo + " address: " + address + " postalCode: " + postalCode + " city: " + city + " oib: " + oib + " email: " + email + " completed: " + completed + " work order num: " + workOrderNumber + " price: " + price);
invoice.setCompanyNameOne(companyNameOne);
invoice.setCompanyNameTwo(companyNameTwo);
invoice.setAddress(address);
invoice.setPostalCode(postalCode);
invoice.setCity(city);
invoice.setOib(oib);
invoice.setEmail(email);
invoice.setCompleted(completed);
invoice.setWorkOrderNumber(workOrderNumber);
invoice.setPrice(price);
invoices.add(invoice);
}
return response;
} catch (Exception e) {
return null;
}
}
}
2. EDIT:
Ich habe es. Entschuldigung, dieses Problem, das Daten nach dem Beheben des Fehlers nicht zeigt, war mein Fehler. In diesem Teil:
JSONObject inv = jsonArray.getJSONObject(i);
String companyNameOne = inv.getString("companyNameOne");
String companyNameTwo = inv.getString("companyNameTwo");
String address = inv.getString("address");
String postalCode = inv.getString("postalCode");
String city = inv.getString("city");
String oib = inv.getString("oib");
String email = inv.getString("email");
int comple = inv.getInt("completed");
String completed = String.valueOf(comple);
String workOrderNumber = inv.getString("workOrderNumber");
String price = inv.getString("price");
diese Strings in (“„) hatte alle Kleinbuchstaben sein, weil ich sie auf diese Weise in meinem PHP geschrieben.
Vielen Dank für Ihre Hilfe.
Wo haben Sie ein Rechnungen Objekt initialisieren? –
@Alex Nik Beim Start, oben onCreate-Methode – Mystiq
onStart Aufruf nach onCreate-Methode. Sie sollten die Sammlung initialisieren, bevor Sie sie an den Adapter übergeben. –