2017-12-30 26 views
0

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 
+1

Ist es möglich, die Protokolle/Ausnahmedetails zu buchen. – lib4

+0

Ich habe die Protokolle hinzugefügt @ lib4 –

+0

ar_list ist nicht initialisiert. – lib4

Antwort

0

scheint wie ar_list nicht initialisiert ist.

Verwandte Themen