Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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 这个片段视图模型应该放什么?_Java_Android_Android Fragments_Model View Controller - Fatal编程技术网

Java 这个片段视图模型应该放什么?

Java 这个片段视图模型应该放什么?,java,android,android-fragments,model-view-controller,Java,Android,Android Fragments,Model View Controller,我想问一下fragment和viewmodel。我正在制作一个gridView,可以通过改装(导航抽屉)显示图像。使用mainActivity时没有问题,但使用片段时会出现如下错误 public class InfografisFragment extends Fragment { private InfografisViewModel infografisViewModel; private List<Spacecraft> spacecraftList; private Gr

我想问一下fragment和viewmodel。我正在制作一个gridView,可以通过改装(导航抽屉)显示图像。使用mainActivity时没有问题,但使用片段时会出现如下错误

public class InfografisFragment extends Fragment {

private InfografisViewModel infografisViewModel;
private List<Spacecraft> spacecraftList;

private GridViewAdapter adapter;
private GridView gridView;

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    infografisViewModel = ViewModelProviders.of(this).get(InfografisViewModel.class);
    View root = inflater.inflate(R.layout.fragment_infografis, container, false);

    return root;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    MyAPIService myAPIService = RetrofitClientInstance.getRetrofitInstance().create(MyAPIService.class);
    gridView = getView().findViewById(R.id.grid_view);

    Call<List<Spacecraft>> call = myAPIService.getSpacecrafts();
    call.enqueue(new Callback<List<Spacecraft>>() {

        @Override
        public void onResponse(Call<List<Spacecraft>> call, Response<List<Spacecraft>> response) {
            spacecraftList = response.body();
            adapter = new GridViewAdapter(getContext(), spacecraftList);
            gridView.setAdapter(adapter);
        }
        @Override
        public void onFailure(Call<List<Spacecraft>> call, Throwable throwable) {
            Toast.makeText(getContext(), throwable.getMessage(), Toast.LENGTH_LONG).show();
        }
    });
}

class Spacecraft {
    /*
    INSTANCE FIELDS
     */
    @SerializedName("gambar_info")
    private String gambar_info;

    public Spacecraft(int id_info, String gambar_info) {
        this.gambar_info = gambar_info;
    }

    /*
     *GETTERS AND SETTERS
     */

    public String getImageURL() {
        return gambar_info;
    }
}

interface MyAPIService {

    @GET("connection_image_bps.php")
    Call<List<Spacecraft>> getSpacecrafts();
}

static class RetrofitClientInstance {

    private static Retrofit retrofit;
    private static final String BASE_URL = "https://bpskotayogyakarta.000webhostapp.com/";

    public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

class GridViewAdapter extends BaseAdapter {

    private List<Spacecraft> spacecrafts;
    private Context context;

    public GridViewAdapter(Context context,List<Spacecraft> spacecrafts){
        this.context = context;
        this.spacecrafts = spacecrafts;
    }

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

    @Override
    public Object getItem(int pos) {
        return spacecrafts.get(pos);
    }

    @Override
    public long getItemId(int pos) {
        return pos;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        if(view==null)
        {
            view=LayoutInflater.from(context).inflate(R.layout.list_gambar_info,viewGroup,false);
        }

        ImageView spacecraftImageView = view.findViewById(R.id.image_view);

        final Spacecraft thisSpacecraft= spacecrafts.get(position);

        if(thisSpacecraft.getImageURL() != null && thisSpacecraft.getImageURL().length()>0)
        {
            Picasso.get().load(thisSpacecraft.getImageURL()).placeholder(R.drawable.placeholder).into(spacecraftImageView);
        }else {
            Toast.makeText(context, "Empty Image URL", Toast.LENGTH_LONG).show();
            Picasso.get().load(R.drawable.placeholder).into(spacecraftImageView);
        }

        return view;
    }
}
以及调试的其余部分

以及API PHP文件


我一直在反复尝试,在谷歌上搜索,但我还是不明白。我应该怎么做?

尝试在getItem()中传递null,在getItemId()中传递0


按以下方式更改GridViewAdapter中的代码:

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}
以上应该可以解决你的问题。 另外,在onViewCreated方法上,为什么要使用getView()?当视图已在构造函数中作为视图调用时。
您可以使用
gridView=view.findviewbyd(R.id.grid\u视图)取而代之。我想这是一种更好的编码方式。

我找到了一个解决方案,将布局从相对更改为cardview,并在build.gradle中添加compabilityOption

compileOptions{
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

您是否也可以发布您存储在
航天器列表
中的云响应?@Kushal错误非常简单,您正在尝试访问列表中的位置6,该列表在位置5之前只包含元素。调试您的代码并找出位置。另外,你发布的staketrace是有限的,它没有告诉我们错误在哪里occurring@Ricardo这是debug@chrisrobet的其余部分:您能发布
gsonvertrofactory
类吗?我怀疑有什么问题,我们无法在
getItem()
中传递
null
。当用户向下滚动时,将调用此方法,并根据
getItem()
的返回值添加新行
public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}
compileOptions{
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}