Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串[]-nullpointerexception中的setAdapter_Java_Android_Eclipse_Nullpointerexception - Fatal编程技术网

Java 字符串[]-nullpointerexception中的setAdapter

Java 字符串[]-nullpointerexception中的setAdapter,java,android,eclipse,nullpointerexception,Java,Android,Eclipse,Nullpointerexception,Eclipse,java—我正在尝试使用setAdapter从字符串[]创建listview,该字符串是在类AsyncTask中生成的,用于创建sqlconnection。你能帮我解决这个问题吗 我的代码: listaMontanha = (ListView) findViewById(R.id.lstmontanharussa); CriarMontanharussa(); //listaMontanha.setAdapter(new ArrayAdapter&

Eclipse,java—我正在尝试使用setAdapter从字符串[]创建listview,该字符串是在类AsyncTask中生成的,用于创建sqlconnection。你能帮我解决这个问题吗

我的代码:

        listaMontanha = (ListView) findViewById(R.id.lstmontanharussa);
    CriarMontanharussa();
    //listaMontanha.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, horariosMontanha));

}

public void CriarMontanharussa(){
    LerMontanha montanha = new LerMontanha();
    montanha.execute();
}

public class LerMontanha extends AsyncTask<String, Void, String> {

    int contador=0;

    @Override
    protected String doInBackground(String... urls) {

      String response = null, codigo = null, hora, estado;
      int qt = 0;

      try {

            Class.forName("com.mysql.jdbc.Driver");  
            System.out.println("driver conectado");
            Connection con = DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/savetime", "root", "root");
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("select cd_brinquedo from brinquedo where nm_brinquedo = 'montanha russa'");
            if (rs.next()) {
                codigo = rs.getString(1);
            }
            System.out.println("CODIGO= " +codigo );
            ResultSet rs1 = st.executeQuery("select hh_inicio_rodada from rodada where cd_brinquedo = " + codigo);
            while(rs1.next()) {

                hora = rs1.getString(1);
                System.out.println("hora= " + hora);
                Statement stmt = con.createStatement();
                ResultSet rs2 = stmt.executeQuery("select COUNT(*) from solucaoingressorodada where cd_brinquedo = " + codigo + " and hh_inicio_rodada = '" + hora+ "'");
                if (rs2.next()) {
                    qt = rs2.getInt(1);
                }
                System.out.println("qt= " + qt);
                if (qt<10){
                    estado="Disponível";
                } else {
                    estado ="Fila lotada";
                }
                horariosMontanha[contador] = hora + "         " + estado;
                contador= contador+1;
            }
            rs1.close();
            st.close();
            con.close();

      }
      catch(Exception e) {
          e.printStackTrace();
          System.out.println("ERRO: " + e.toString());
      }

    return response;
    }

    @Override
    protected void onPostExecute(String resultado) {
        for (int i = 0; i < contador; i++){
            System.out.println(horariosMontanha[i]);
        }
    }
}

您的问题是没有考虑AsyncTask的异步性质。调用Lermonthana-montanha对象的execute方法并立即设置适配器。发生NullPointerException是因为您尝试使用数组horariosMontanha,但当您尝试使用它时,它仍然引用null。也就是说,Lermonthana的doInBackground中的整段代码都没有机会更新该变量

此外,由于您正在从两个线程(UI线程和doInBackground运行的线程)更新horariosMontanha,因此可能会出现很多问题


AsyncTask的效果应发生在onPostExecute中,一旦阵列就绪,请设置适配器。

在确定适配器处于有效状态并保持有效状态之前,不要设置适配器。看起来你想为一个空项创建一个视图。哦,我明白了。那么,我应该在AsyncTask的onPostExecute中执行所有操作,包括setAdapter吗?或者如何首先执行所有AsyncTask,然后执行setAdapter?一个选项是修改AsyncTask,使其从doInBackground返回一个数组,并将此数组传递给onPostExecute,在onPostExecute中使用此数组配置适配器。必须注意的是,当onPostExecute运行时,活动仍处于有效状态,即如果活动已被破坏,请不要设置适配器等。非常感谢,我做到了您所说的,并且工作正常!
06-22 00:03:06.462: I/System.out(1196): driver conectado
06-22 00:03:07.261: I/System.out(1196): CODIGO= 1
06-22 00:03:07.371: I/System.out(1196): hora= 12:00:00
06-22 00:03:07.381: I/System.out(1196): qt= 1
06-22 00:03:07.391: I/System.out(1196): hora= 12:30:00
06-22 00:03:07.412: I/System.out(1196): qt= 0
06-22 00:03:07.431: I/System.out(1196): 12:00:00         Disponível
06-22 00:03:07.431: I/System.out(1196): 12:30:00         Disponível
06-22 00:03:07.511: D/AndroidRuntime(1196): Shutting down VM
    06-22 00:03:07.511: W/dalvikvm(1196): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
    06-22 00:03:07.651: E/AndroidRuntime(1196): FATAL EXCEPTION: main
    06-22 00:03:07.651: E/AndroidRuntime(1196): java.lang.NullPointerException
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.AbsListView.obtainView(AbsListView.java:2255)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.ListView.onMeasure(ListView.java:1156)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.View.measure(View.java:15172)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.RelativeLayout.measureChild(RelativeLayout.java:602)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:415)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.View.measure(View.java:15172)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.View.measure(View.java:15172)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.View.measure(View.java:15172)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.View.measure(View.java:15172)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.Choreographer.doFrame(Choreographer.java:525)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.os.Handler.handleCallback(Handler.java:615)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.os.Handler.dispatchMessage(Handler.java:92)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.os.Looper.loop(Looper.java:137)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at android.app.ActivityThread.main(ActivityThread.java:4745)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at java.lang.reflect.Method.invoke(Method.java:511)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    06-22 00:03:07.651: E/AndroidRuntime(1196):     at dalvik.system.NativeStart.main(Native Method)