Ich habe die Hälfte meiner App erstellt und ich bin fest, wo ich die Daten aus der SQLite-Datenbank abrufen und in einem ListView in einem Tab-Fragment anzeigen müssen.
Ich habe zwei Registerkarten und einer von ihnen zeigt die Liste der Daten aus der SQLite-Datenbank.SQLite-Daten in einem ListView in einem Fragment
Einige Leute auf Stackoverflow haben vorgeschlagen, eine RecyclerView anstelle einer ListView zu verwenden, aber es ist schwierig für mich, eine ListView zu verwenden, und ich weiß nichts über die RecyclerView.
Ich bin neu in Android und ich fühle, dass diese Probleme nicht so schwierig für professionelle Entwickler sind, aber für mich ist es ziemlich schwierig.
Ich bin in der Lage, die Daten aus der Datenbank in einem Fragment anzuzeigen, aber ich kann nur eine Zeile anzeigen, die der neueste Eintrag ist.
Ich möchte die gesamte Liste im Fragment von neuesten zu alten, von oben nach unten anzeigen.
Der andere Teil des Problems ist, dass die Liste nicht automatisch aktualisiert wird.
Ich muss die App schließen und erneut öffnen, um den neuesten Eintrag im Fragment zu sehen.
Hier ist mein Code -
PeopleFragemnt.classVor
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.kevin.sugar.DataBase.DateBaseHelper;
import com.example.kevin.sugar.DataBase.Information;
import com.example.kevin.sugar.R;
/**
* A simple {@link Fragment} subclass.
*/
public class PeopleFragment extends Fragment {
DateBaseHelper dateBaseHelper;
SQLiteDatabase sqLiteDatabase;
Cursor cursor;
TextView name,weight,height;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View mview = inflater.inflate(R.layout.person_row, container, false);
name = (TextView)mview.findViewById(R.id.person_name);
weight = (TextView)mview.findViewById(R.id.heatbeat);
height = (TextView)mview.findViewById(R.id.bpm_upper_lower);
dateBaseHelper = new DateBaseHelper(getContext());
sqLiteDatabase = dateBaseHelper.getReadableDatabase();
cursor = dateBaseHelper.getUserInformation();
if (cursor.moveToFirst()){
do{
String user_name,user_weight,user_height;
user_name = cursor.getString(cursor.getColumnIndex(Information.NAME));
user_weight = cursor.getString(cursor.getColumnIndex(Information.WEIGHT));
user_height = cursor.getString(cursor.getColumnIndex(Information.HEIGHT));
Log.e("App",user_name+ "" + user_height + " " +user_weight);
name.setText(user_name);
weight.setText(user_weight);
height.setText(user_height);
}while (cursor.moveToNext());
}
return mview;
}
}
bearbeiten
Veränderung der PeopleFragement.class
ListDataAdapter.Class
import android.content.Context;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.example.kevin.sugar.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Kuro on 4/20/2016.
*/
public class ListDataAdapter extends ArrayAdapter {
List mlist = new ArrayList();
public ListDataAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public void add(Object object) {
super.add(object);
mlist.add(object);
}
static class LayoutHandler{
TextView name, weight,height;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int position) {
return mlist.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View mview = convertView;
LayoutHandler layoutHandler;
if(mview==null){
LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mview = layoutInflater.inflate(R.layout.person_row,parent,false);
layoutHandler = new LayoutHandler();
layoutHandler.name = (TextView)mview.findViewById(R.id.person_name);
layoutHandler.weight = (TextView)mview.findViewById(R.id.heatbeat);
layoutHandler.height = (TextView)mview.findViewById(R.id.bpm_upper_lower);
mview.setTag(layoutHandler);
}else {
layoutHandler = (LayoutHandler) mview.getTag();
}
DataProvider dataProvider = (DataProvider)this.getItem(position);
layoutHandler.name.setText(dataProvider.getName());
layoutHandler.weight.setText(dataProvider.getWeight());
layoutHandler.height.setText(dataProvider.getHeight());
return mview;
}
}
DataProvide.class
public class DataProvider {
private String name;
private String weight;
private String height;
public DataProvider(String name,String weight,String height){
this.name = name;
this.weight = weight;
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
}
Error Log
FATAL EXCEPTION: main
Process: com.example.kevin.sugar, PID: 29352
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at com.example.kevin.sugar.Fragments.PeopleFragment.onCreateView(PeopleFragment.java:40)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1106)
at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:610)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:677)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
at android.view.View.measure(View.java:17565)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2045)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1196)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1409)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Sie geben Ihre 3 TextViews alle Werte in der Zeile. Und die letzte bleibt, da die Schleife endet. So arbeiten Sie nicht mit einer ListView: Sie müssen einen Adapter füllen und den Adapter dann an die ListView übergeben. Sie sollten nach einem Tutorial zu 'benutzerdefinierten Zeilen in einem ListView suchen, das aus einer Datenbank in Android gefüllt ist. –
Danke für die Antwort. Kannst du das Adapterteil erklären? Ich habe es nicht verstanden. – Greyfrog
Create ArrayList mit Adapter dann funktioniert perfekt. –