2017-12-30 32 views
0

私はCarpool Androidアプリを開発していて、JavaサーブレットとJDBCを使用しています。ログインと登録は正常に動作しています。 Custemerログイン後、listViewにドライバの名前と番号が表示されますが、ログインするとクラッシュし、理由がわからず、問題はLoginActivityにありません。 JavaサーブレットはOK、データベースはOKです。 これは私のコードです:スレッドと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) { 
      } 
     } 
    } 
} 

ログ:

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

ログ/例外の詳細を投稿することは可能ですか? – lib4

+0

ログを追加しました@ lib4 –

+0

ar_listが初期化されていません。 – lib4

答えて

0

はar_listが初期化されていないようです。

関連する問題