Java 如何使用SQL数据库在片段上创建适配器ListView?

Java 如何使用SQL数据库在片段上创建适配器ListView?,java,android,android-fragments,android-listview,android-database,Java,Android,Android Fragments,Android Listview,Android Database,我试图调用或查看具有此类规范的ListView: 这是我的密码。这是名为EducacionFragment的片段,我想在这里调用布局“eventos”: 这是我的名为Elementos_Eventos的类,我从数据库中获取所有信息,并将其放入列表中: public class Elementos_Eventos { //URL to get JSON Array private static String url = "http://ucwm.co.nf/Evento_app

我试图调用或查看具有此类规范的ListView:

这是我的密码。这是名为EducacionFragment的片段,我想在这里调用布局“eventos”:

这是我的名为Elementos_Eventos的类,我从数据库中获取所有信息,并将其放入列表中:

public class Elementos_Eventos {

    //URL to get JSON Array
    private static String url = "http://ucwm.co.nf/Evento_app.php";

    //JSON Node Names
    private static final String TAG_EVENTOS = "eventos";
    private static final String TAG_ID = "idEvento";
    private static final String TAG_NAME = "Nombre";
    private static final String TAG_DESCRIP = "Descripcion";
    private static final String TAG_FECHAI = "FechaInicio";
    private static final String TAG_HORA = "Hora";
    private static final String TAG_FECHAF = "FechaFinal";
    private static final String TAG_LUGAR = "Lugar";
    private static JSONArray eventos = null;

    public static List<Elemento_Eventos> listaElementos = elementos();

    public Elementos_Eventos() {
        listaElementos = elementos();
    }

    static Elemento_Eventos elemento(int id) {
        return listaElementos.get(id);
    }

    public static ArrayList<Elemento_Eventos> elementos() {

        JSONParser jParser = new JSONParser();
        JSONObject json;

        // Getting JSON from URL
        json = jParser.getJSONFromUrl(url);

        ArrayList<Elemento_Eventos> elementos;
        elementos = null;
        try {
            // Getting JSON Array from URL
            eventos = json.getJSONArray(TAG_EVENTOS);

            elementos = new ArrayList<Elemento_Eventos>();

            for (int i = 0; i < eventos.length(); i++) {

                JSONObject c = eventos.getJSONObject(i);

                // Storing  JSON item in a Variable
                String id = c.getString(TAG_ID);
                String nombre = c.getString(TAG_NAME);
                String descripcion = c.getString(TAG_DESCRIP);
                String fechaInicio = c.getString(TAG_FECHAI);
                String hora = c.getString(TAG_HORA);
                String fechaFinal = c.getString(TAG_FECHAF);
                String lugar = c.getString(TAG_LUGAR);

                elementos.add(new Elemento_Eventos(id, nombre,descripcion, fechaInicio, hora, fechaFinal, lugar));
            }

        }
        catch (JSONException e) {
            e.printStackTrace();
        }
        return elementos;
    }

    public List<String> listaElementos()
    {
        ArrayList<String> todos = new ArrayList<String>();
        for (Elemento_Eventos e:listaElementos)
            todos.add(e.getNombre());
        return todos;
    }

    public static int size() {
        return listaElementos.size();
    }
最后是我的Adadador_Eventos类,我将所有这些信息放在TextView中:

public class Adaptador_Eventos extends BaseAdapter{

    private final Activity actividad;

    public Adaptador_Eventos(Activity actividad) {
        super();
        this.actividad = actividad;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Elemento_Eventos elemento = Elementos_Eventos.elemento(position);

        LayoutInflater inflater = actividad.getLayoutInflater();
        View view = inflater.inflate(R.layout.elemento_eventos, null,true);
        TextView nombreDelEvento, lugar, fecha, descripcion;
        ImageView logo_tipo;
        nombreDelEvento = (TextView) view.findViewById(R.id.nom_evento);
        lugar = (TextView) view.findViewById(R.id.lugar_evento);
        fecha = (TextView) view.findViewById(R.id.fecha_evento);
        descripcion = (TextView) view.findViewById(R.id.desc_evento);
        logo_tipo = (ImageView) view.findViewById(R.id.imageView);

        nombreDelEvento.setText(elemento.getNombre());
        lugar.setText(elemento.getLugar());
        fecha.setText(elemento.getFeInicio());
        descripcion.setText(elemento.getDescripcion());

        int id = R.drawable.kcc;
        logo_tipo.setImageResource(id);
        logo_tipo.setScaleType(ImageView.ScaleType.FIT_END);
        return view;
    }

    @Override
    public int getCount() {
        return Elementos_Eventos.size();
    }

    @Override
    public Object getItem(int position) {
        return Elementos_Eventos.elemento(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}
当我调用fragment Educacion时,它用消息使我的应用程序崩溃

不幸的是,Unidas Contigo A.C.已经停止

以下是显示的堆栈跟踪:

11-1205:10:00.279 7414-7414/?D/dalvikvm?延迟启用CheckJNI
11-12 05:10:01.059 7414-7414/com.example.juanisaac.unidascontigoac W/dalvikvm?VFY:找不到签名中引用的类(Landroid/view/SearchEvent;)
11-12 05:10:01.095 7414-7414/com.example.juanisaac.unidascontigoac I/dalvikvm?找不到从方法android.support.v7.internal.view.WindowCallbackWrapper.onSearchRequested引用的方法android.view.Window$Callback.onSearchRequested
11-12 05:10:01.107 7414-7414/com.example.juanisaac.unidascontigoac W/dalvikvm?VFY:无法解析接口方法15449:Landroid/view/Window$Callback;。onSearchRequested(Landroid/view/SearchEvent;)Z
11-12 05:10:01.119 7414-7414/com.example.juanisaac.unidascontigoac D/dalvikvm?VFY:在0x0002处替换操作码0x72
11-12 05:10:01.123 7414-7414/com.example.juanisaac.unidascontigoac I/dalvikvm?找不到从方法android.support.v7.internal.view.WindowCallbackWrapper.OnWindowsStartingActionMode引用的方法android.view.WindowCallbackWrapper.OnWindowsStartingActionMode
11-12 05:10:01.139 7414-7414/com.example.juanisaac.unidascontigoac W/dalvikvm?VFY:无法解析接口方法15453:Landroid/view/Window$Callback;。OnWindowsStartingActionMode(Landroid/view/ActionMode$回调;I)Landroid/view/ActionMode;
11-12 05:10:01.139 7414-7414/com.example.juanisaac.unidascontigoac D/dalvikvm?VFY:在0x0002处替换操作码0x72
11-12 05:10:01.407 7414-7414/com.example.juanisaac.unidascontigoac I/appcompativiewflatter?应用程序:主题现在已被弃用。请改用android:theme。
11-12 05:10:01.419 7414-7414/com.example.juanisaac.unidascontigoac I/dalvikvm?找不到方法android.content.res.TypedArray.getChangingConfigurations,该方法引用自方法android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
11-12 05:10:01.423 7414-7414/com.example.juanisaac.unidascontigoac W/dalvikvm?VFY:无法解析虚拟方法426:Landroid/content/res/TypedArray;。getChangingConfigurations()I
11-12 05:10:01.423 7414-7414/com.example.juanisaac.unidascontigoac D/dalvikvm?VFY:在0x0002处替换操作码0x6e
11-12 05:10:01.431 7414-7414/com.example.juanisaac.unidascontigoac I/dalvikvm?找不到从方法android.support.v7.internal.widget.TintTypedArray.getType引用的方法android.content.res.TypedArray.getType
11-12 05:10:01.439 7414-7414/com.example.juanisaac.unidascontigoac W/dalvikvm?VFY:无法解析虚拟方法448:Landroid/content/res/TypedArray;。getType(I)I
11-12 05:10:01.439 7414-7414/com.example.juanisaac.unidascontigoac D/dalvikvm?VFY:在0x0002处替换操作码0x6e
11-12 05:10:01.479 7414-7414/com.example.juanisaac.unidascontigoac I/appcompativiewflatter?应用程序:主题现在已被弃用。请改用android:theme。
11-12 05:10:01.547 7414-7416/com.example.juanisaac.unidascontigoac D/dalvikvm?GC_并发释放192K,3%释放8841K/9068K,暂停13ms+0ms,总计26ms
11-12 05:10:01.631 7414-7414/com.example.juanisaac.unidascontigoac D/dalvikvm?所有释放5K的GC_,3%释放8858K/9068K,暂停13ms,总计14ms
11-12 05:10:01.707 7414-7414/com.example.juanisaac.unidascontigoac I/dalvikvm堆?对于1517220字节分配,将堆(frag大小写)增加到10.120MB

11-12 05:10:01.719 7414-7424/com.example.juanisaac.unidascontigoac D/dalvikvm?GC_FOR_ALLOC freed您需要创建一个列表变量,并使用它在getCount()函数中返回对象

List<Elemento_Eventos> myList = new ArrayList<Elemento_Eventos>();

public Adaptador_Eventos(Activity actividad,  List<Elemento_Eventos> myList){
    super();
    this.actividad = actividad;
    this.myList = myList;
}

上面的代码有两个问题。第一次加载类时,它从elementos()函数中的URL获取数据,该函数通过调用onCreate()中的setAdapter来实现

Android上不允许在主/UI线程上进行网络活动。因此,它将NetworkOnMainThread作为异常抛出


其次,您应该使用asyncTask连接到URL,并最好在onPostExecute()中创建listaElements列表。

对于类Adapter\u Eventos,请更改

public static List<Elemento_Eventos> listaElementos = elementos();

public Elementos_Eventos() {
    listaElementos = elementos();
}


尝试一下,并使用AsyncTask来避免NetworkOnMainThread异常。

您需要向我们提供完整的错误消息以及您获得的堆栈跟踪。否则,我们无法为您提供太多帮助。您的适配器中的列表计数可能有问题。但是需要完整的日志
List<Elemento_Eventos> myList = new ArrayList<Elemento_Eventos>();

public Adaptador_Eventos(Activity actividad,  List<Elemento_Eventos> myList){
    super();
    this.actividad = actividad;
    this.myList = myList;
}
@Override
public int getCount() {
    return myList.size();
}
public static List<Elemento_Eventos> listaElementos = elementos();

public Elementos_Eventos() {
    listaElementos = elementos();
}
public static List<Elemento_Eventos> listaElementos ;

public Elementos_Eventos() {
}

public static void init(){
    listaElementos = elementos();
}
public class EducacionFragment extends ListFragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.eventos_layout, container, false);

        //((MainActivity) getActivity()).getSupportActionBar().setTitle("Eventos");
        //Elementos_Eventos elementos_eventos = new Elementos_Eventos();

        ListView listview =(ListView)view.findViewById(R.id.listView2);

        Adaptador_Eventos adaptador = new Adaptador_Eventos(getActivity());

        //adaptador = new Adaptador_Eventos(getActivity());

        listview.setAdapter(adaptador);

        return view;
    }
}
public class EducacionFragment extends ListFragment{
    private ListView listview;
    private Adaptador_Eventos adaptador;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.eventos_layout, container, false);

        //((MainActivity) getActivity()).getSupportActionBar().setTitle("Eventos");
        //Elementos_Eventos elementos_eventos = new Elementos_Eventos();

        listview =(ListView)view.findViewById(R.id.listView2);

        adaptador = new Adaptador_Eventos(getActivity());

        //adaptador = new Adaptador_Eventos(getActivity());

        new AsyncTask(){
            @Override
            protected Object doInBackground(Object[] params) {
                Elementos_Eventos.init();
                return null;
            }

            @Override
            protected void onPostExecute(Object o) {
                super.onPostExecute(o);
                listview.setAdapter(adaptador);
            }
        }.execute();

        return view;
    }
}