Ich entwickle eine Carpool Android App und mit Java Servlets und JDBC, die Anmeldung und Registrierung funktionieren gut. Nach einer Custemer-Anmeldung wird ein listView mit den Namen und Nummern der Treiber angezeigt, aber wenn ich mich anmelde, stürzt es ab und ich habe nicht verstanden warum und das Problem ist nicht in der LoginActivity. Das Java Servlet ist Ok und die Datenbank ist Ok. Dies ist mein Code:Thread und ArrayList
CustomersActivity:
public class CustomerActivity extends AppCompatActivity {
private static ListView list_view;
private static ArrayList<String> ar_list;
private static String[] tabNum;
TextView txt;
String recieved;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custemer);
list_view = (ListView)findViewById(R.id.list);
txt = (TextView)findViewById(R.id.txtHello);
Intent i = getIntent();
final String name = i.getStringExtra("name");
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://10.0.2.2:8081/MiniProjectAJ/CustomerServlet");
URLConnection cnx = url.openConnection();
cnx.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(cnx.getOutputStream());
out.write("Hello");
out.close();
BufferedReader bf = new BufferedReader(new InputStreamReader(cnx.getInputStream()));
String returnString = "";
recieved = "";
while ((returnString = bf.readLine()) != null) {
recieved = returnString;
}
String[] sp = recieved.split("\\/");
String one = sp[0];
int i = Integer.parseInt(one);
int p = 1;
tabNum = new String[i];
while (p <= i) {
String two = sp[p];
String[] s = two.split("-");
String t = s[1];
ar_list.add(two);
tabNum[p-1] = t;
p = p + 1;
}
bf.close();
runOnUiThread(new Runnable() {
@Override
public void run() {
txt.setText("Hello "+name);
ArrayAdapter adapter = new ArrayAdapter(CustemerActivity.this, android.R.layout.simple_spinner_dropdown_item, ar_list);
list_view.setAdapter(adapter);
}
});
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}).start();
list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String num = tabNum[position];
Intent i2 = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+num));
startActivity(i2);
}
});
}
}
CustomerServlet:
public class CustomerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CustomerServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//doGet(request, response);
try {
int length = request.getContentLength();
byte[] input = new byte[length];
ServletInputStream sin = request.getInputStream();
int c, count = 0;
while ((c=sin.read(input, count, input.length-count))!=-1) {
count+=c;
}
sin.close();
String receivedString = new String(input);
System.out.println(receivedString);
response.setStatus(HttpServletResponse.SC_OK);
OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream());
Connection con = EtablirConnection.getConnection();
String Q = "SELECT FName,LName,Number FROM drivers;";
String Q2 = "SELECT COUNT(*) FROM drivers;";
Statement st = con.createStatement();
Statement st1 = con.createStatement();
ResultSet rsc = st1.executeQuery(Q2);
String send = "";
while (rsc.next()) {
send = rsc.getString(1);
}
ResultSet rs = st.executeQuery(Q);
while (rs.next()) {
String Name = rs.getString("FName")+" "+rs.getString("LName");
String Number = rs.getString("Number");
send = send+"/"+Name+"-"+Number;
}
System.out.println(send);
writer.write(send);
writer.flush();
writer.close();
} catch(IOException | SQLException e){
try {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().print(e.getMessage());
response.getWriter().close();
} catch (IOException ioe) {
}
}
}
}
Logs:
12-30 20:19:14.129 10056-10056/? I/art: Not late-enabling -Xcheck:jni (already on)
12-30 20:19:14.129 10056-10056/? W/art: Unexpected CPU variant for X86 using defaults: x86
12-30 20:19:14.333 10056-10056/apps.dev.ndroid.projectandroj2ee W/System: ClassLoader referenced unknown path: /data/app/apps.dev.ndroid.projectandroj2ee-1/lib/x86
12-30 20:19:14.393 10056-10056/apps.dev.ndroid.projectandroj2ee I/InstantRun: starting instant run server: is main process
12-30 20:19:14.545 10056-10056/apps.dev.ndroid.projectandroj2ee W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
12-30 20:19:14.828 10056-10085/apps.dev.ndroid.projectandroj2ee I/OpenGLRenderer: Initialized EGL, version 1.4
12-30 20:19:14.828 10056-10085/apps.dev.ndroid.projectandroj2ee D/OpenGLRenderer: Swap behavior 1
12-30 20:19:14.828 10056-10085/apps.dev.ndroid.projectandroj2ee W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
12-30 20:19:14.828 10056-10085/apps.dev.ndroid.projectandroj2ee D/OpenGLRenderer: Swap behavior 0
12-30 20:19:14.932 10056-10056/apps.dev.ndroid.projectandroj2ee W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
12-30 20:19:19.273 10056-10085/apps.dev.ndroid.projectandroj2ee D/OpenGLRenderer: endAllActiveAnimators on 0xaabb1180 (RippleDrawable) with handle 0x9a24d010
12-30 20:19:20.936 10056-10085/apps.dev.ndroid.projectandroj2ee D/OpenGLRenderer: endAllActiveAnimators on 0x9a2d1800 (RippleDrawable) with handle 0x9a24d020
12-30 20:19:35.058 10056-10056/apps.dev.ndroid.projectandroj2ee W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
12-30 20:19:42.830 10056-10512/apps.dev.ndroid.projectandroj2ee D/NetworkSecurityConfig: No Network Security Config specified, using platform default
12-30 20:19:42.912 10056-10515/apps.dev.ndroid.projectandroj2ee E/AndroidRuntime: FATAL EXCEPTION: Thread-5
Process: apps.dev.ndroid.projectandroj2ee, PID: 10056
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
at apps.dev.ndroid.projectandroj2ee.CustemerActivity$1.run(CustemerActivity.java:64)
at java.lang.Thread.run(Thread.java:761)
12-30 20:19:43.084 10056-10056/apps.dev.ndroid.projectandroj2ee W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
12-30 20:19:43.295 10056-10085/apps.dev.ndroid.projectandroj2ee D/OpenGLRenderer: endAllActiveAnimators on 0x9a354800 (RippleDrawable) with handle 0x9a279290
Ist es möglich, die Protokolle/Ausnahmedetails zu buchen. – lib4
Ich habe die Protokolle hinzugefügt @ lib4 –
ar_list ist nicht initialisiert. – lib4