2017-11-08 2 views
-1

Ich schreibe Anwendung für Android. Ich versuche eine Verbindung zwischen SpringBoot mit TomCat und Android herzustellen. Ich benutze Retrofit für das. Ich versuche es mit Tutorial auf Youtube. Aber ich habe einen Fehler im Adapter. Hier: LayoutInflater inflater = ((LayoutInFlater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE));Retrofit und Android Fehler

Kann jemand es lösen?

Code:

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.TextView; 
import java.util.List; 

public class UserAdapter extends ArrayAdapter { 
private Context context; 
private List<User> values; 


public UserAdapter(Context context, int resource) { 
    super(context, resource); 
} 

public UserAdapter(Context context, List<User> values) { 
    super(context, R.layout.list_item_pagination, values); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 

    if (row == null) { 
     LayoutInflater inflater = 
       ((LayoutInflater) 
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)); 
     row = inflater.inflate(R.layout.list_item_pagination, parent, 
false); 
    } 
    TextView textView = (TextView) 
row.findViewById(R.id.list_item_pagination_text); 
    User item = values.get(position); 
    String message = item.getName(); 
    textView.setText(message); 

    return row; 
}} 

Logcat:

11-08 20:49:23.180 2956-2956/com.example.karka.myapplication E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.karka.myapplication, PID: 2956 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 
                       at com.example.karka.myapplication.UserAdapter.getView(UserAdapter.java:32) 
                       at android.widget.AbsListView.obtainView(AbsListView.java:2363) 
                       at android.widget.ListView.measureHeightOfChildren(ListView.java:1326) 
                       at android.widget.ListView.onMeasure(ListView.java:1233) 
                       at android.view.View.measure(View.java:19857) 
                       at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) 
                       at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
                       at android.view.View.measure(View.java:19857) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
                       at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) 
                       at android.view.View.measure(View.java:19857) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 
                       at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) 
                       at android.view.View.measure(View.java:19857) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
                       at android.view.View.measure(View.java:19857) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 
                       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                       at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
                       at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
                       at android.view.View.measure(View.java:19857) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
                       at com.android.internal.policy.DecorView.onMeasure(DecorView.java:689) 
                       at android.view.View.measure(View.java:19857) 
                       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2275) 
                       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1366) 
                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1619) 
                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254) 
                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337) 
                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) 
                       at android.view.Choreographer.doCallbacks(Choreographer.java:686) 
                       at android.view.Choreographer.doFrame(Choreographer.java:621) 
                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) 
                       at android.os.Handler.handleCallback(Handler.java:751) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:154) 
                       at android.app.ActivityThread.main(ActivityThread.java:6119) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

Antwort

0

In Ihrem Konstruktor übergeben Sie den Kontext und die Liste direkt an den Superkonstruktor, ohne Ihre Referenzen auf den Kontext und die Werte festzulegen. Aus diesem Grund werden Ihre Werte nicht festgelegt, wenn Sie sie anrufen. Sie werden jedoch innerhalb der Superklasse platziert. Sie können sich Code sparen und diese Änderungen vornehmen.

public class UserAdapter extends ArrayAdapter<User> { 

public UserAdapter(Context context, int resource) { 
    super(context, resource); 
} 

public UserAdapter(Context context, List<User> values) { 
    super(context, R.layout.list_item_pagination, values); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 

    if (row == null) { 
     LayoutInflater inflater = 
       ((LayoutInflater) 
         getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)); 
     row = inflater.inflate(R.layout.list_item_pagination, parent, 
       false); 
    } 
    TextView textView = (TextView) 
      row.findViewById(R.id.list_item_pagination_text); 
    User item = getItem(position); 
    String message = item.getName(); 
    textView.setText(message); 

    return row; 
}} 
0

Der Kontext gemäß dem Fehler in der Stack-Trace null ist. Sie haben zwei Konstruktoren in Ihrem Adapter, die Kontextobjekte übergeben. Verwenden Sie sie, um den lokalen Kontext in Ihrem Adapter zu initialisieren.