Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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
Android-在JSONObject请求后移动到主线程_Android_Multithreading - Fatal编程技术网

Android-在JSONObject请求后移动到主线程

Android-在JSONObject请求后移动到主线程,android,multithreading,Android,Multithreading,我对Android相当陌生(只在Java中),我担心我可能没有正确地学到一些东西 目前我有一个片段显示了一个recyclerview。数据从远程Json文件加载 这是我在片段中看到的: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragmen

我对Android相当陌生(只在Java中),我担心我可能没有正确地学到一些东西

目前我有一个片段显示了一个recyclerview。数据从远程Json文件加载

这是我在片段中看到的:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_library, container, false);

    libraryList = new LibraryHandler().getLibrary(new ShowListAsyncResponse() {
        @Override
        public void processFinished(ArrayList<Object> showArrayList) {
            recyclerViewAdapter = new LibraryRecyclerViewAdapter(getContext(), libraryList);

            libraryRecyclerView = v.findViewById(R.id.libraryRecyclerView);
            libraryRecyclerView.setHasFixedSize(true);
            libraryRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
            libraryRecyclerView.setAdapter(recyclerViewAdapter);
        }
    });

    return v;
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.fragment_库,容器,假);
libraryList=new LibraryHandler().getLibrary(new ShowListAsyncResponse()){
@凌驾
公共作废处理已完成(ArrayList showArrayList){
RecycleServiceAdapter=new LibraryRecycleServiceAdapter(getContext(),libraryList);
libraryRecyclerView=v.findViewById(R.id.libraryRecyclerView);
libraryRecyclerView.setHasFixedSize(真);
setLayoutManager(新的LinearLayoutManager(getActivity());
LibraryRecycleView.setAdapter(RecycleServiceAdapter);
}
});
返回v;
}
LibraryHandler是从服务器加载数据的类:

public class LibraryHandler {
private final String url = "https://path/to/api";

private ArrayList<Object> libraryList = new ArrayList<>();

public ArrayList<Object> getLibrary(final ShowListAsyncResponse callBack) {

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
            Request.Method.GET,
            url,
            null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    try {
                        JSONArray showsJsonArray = response.getJSONArray("shows");
                        JSONArray moviesJsonArray = response.getJSONArray("movies");

                        // Shows
                        for (int i = 0; i< showsJsonArray.length(); i++) {
                            JSONObject showObject = showsJsonArray.getJSONObject(i);

                            Gson gson = new Gson();
                            Show show = gson.fromJson(String.valueOf(showObject), Show.class);

                            libraryList.add(show);
                        }

                        // Movies
                        for (int i = 0; i< moviesJsonArray.length(); i++) {
                            JSONObject movieObject = moviesJsonArray.getJSONObject(i);

                            Gson gson = new Gson();
                            Movie movie = gson.fromJson(String.valueOf(movieObject), Movie.class);

                            libraryList.add(movie);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                    if (null != callBack) callBack.processFinished(libraryList);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            }

    );

    AppController.getInstance().addToRequestQueue(jsonObjectRequest);

    return libraryList;
}
公共类LibraryHandler{
私有最终字符串url=”https://path/to/api";
私有ArrayList libraryList=新ArrayList();
公共ArrayList getLibrary(最终ShowListAsyncResponse回调){
JsonObjectRequest JsonObjectRequest=新JsonObjectRequest(
Request.Method.GET,
网址,
无效的
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray showsJsonArray=response.getJSONArray(“shows”);
JSONArray moviesJsonArray=response.getJSONArray(“电影”);
//显示
对于(int i=0;i
界面非常简单

public interface ShowListAsyncResponse {
    void processFinished(ArrayList<Object> showArrayList);
}
公共接口ShowListAsyncResponse{
void processFinished(ArrayList showArrayList);
}
我已经读到应该从主线程调用适配器代码。我是否在processFinished函数的主线程中?如果不是,我如何修改以从主线程运行这些行?

文档:

Volley总是在主线程上传递解析的响应。在主线程上运行可以方便地用接收到的数据填充UI控件,因为您可以直接从响应处理程序自由修改UI控件

因此,
onResponse()
回调在主线程中被触发,因此,
callback.processFinished()
调用也被触发

因此,当触发
processFinished()
时,您可以安全地构建
RecyclerView

你可以查看更多信息

另外,请确保在主线程上运行回调时,不会对其进行繁重的工作