Loader问题

Loader问题

请问老师,我给fragment使用loader接口了,但是运行程序时,程序不会向网络申请数据,我是不是把getLoaderManager().initLoader(0,null,this);放错位置了?getLoaderManager().initLoader(0,null,this);应该放在f阿fragment哪一个方法才对呀?

fragment

package com.example.movieimooc.fragment;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.movieimooc.R;
import com.example.movieimooc.bean.MovieData;

import java.util.List;

import static android.content.ContentValues.TAG;

public class MonvieFragment extends Fragment implements LoaderManager.LoaderCallbacks<List<MovieData>> {

    private RecyclerView mhotRecycle;

    public MonvieFragment() {
        super();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        Log.e(TAG, "onCreate: " );

        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   View view=inflater.inflate(R.layout.fragment_movie,container,false);

        return view;


    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //        mhotRecycle = (RecyclerView) view.findViewById(R.id.id_hot_moview_recycle);
        getLoaderManager().initLoader(0,null,this);
        Log.e(TAG, "onCreateView: " );
    }

    @Override
    public Loader<List<MovieData>> onCreateLoader(int id, Bundle args) {
        return null;
    }

    @Override
    public void onLoadFinished(Loader<List<MovieData>> loader, List<MovieData> data) {
        Log.e(TAG, "onLoadFinished: "+data.get(0).getTitle() );
    }

    @Override
    public void onLoaderReset(Loader<List<MovieData>> loader) {

    }
}

activity

package com.example.movieimooc;

import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.EditText;
import android.widget.Spinner;

import com.example.movieimooc.adpter.MovieAdapter;
import com.example.movieimooc.bean.MovieData;
import com.example.movieimooc.fragment.MonvieFragment;
import com.example.movieimooc.net.MovieLoader;

import java.util.ArrayList;
import java.util.List;


import static android.content.ContentValues.TAG;
public class MainActivity extends AppCompatActivity  {


  private List<MovieData> mdatas=new ArrayList<>();
    private MovieAdapter ovieAdapter;
    private RecyclerView mrecycle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText edit = (EditText) findViewById(R.id.id_ed_movie_name);
        Spinner spinner = (Spinner) findViewById(R.id.id_movie_sp_type);
//        mrecycle = (RecyclerView) findViewById(R.id.id_movie_recycle);
//        getSupportLoaderManager().initLoader(0,null,this);
//        mrecycle.setLayoutManager(new GridLayoutManager(this,2));

        MonvieFragment hotFragment=new MonvieFragment();
         getSupportFragmentManager().beginTransaction()
                 .add(R.id.id_list_content,hotFragment)
.commit();


}
}

loader

package com.example.movieimooc.net;

import android.content.Context;
import android.content.IntentFilter;
import android.graphics.Movie;
import android.support.v4.content.AsyncTaskLoader;
import android.util.Log;
import android.widget.LinearLayout;

import com.example.movieimooc.Config.Config;
import com.example.movieimooc.bean.MovieData;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import static android.content.ContentValues.TAG;
public class MovieLoader extends AsyncTaskLoader<List<MovieData>> {
    public MovieLoader(Context context) {
        super(context);
    }

    @Override
            protected void onStartLoading() {
                super.onStartLoading();
                if (isStarted()){
                    forceLoad();
        }
    }

    @Override
    public List<MovieData> loadInBackground() {
        Log.e(TAG, "准备申请数据了");
        List<MovieData> mmData=new ArrayList<MovieData>();
        try {
            Log.e(TAG, "我进来了1" );
            URL url=new URL("http://www.imooc.com/api/movie");
            Log.e(TAG, "我进来了2" );
            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            Log.e(TAG, "我进来了3" );
            conn.setRequestMethod("POST");
            Log.e(TAG, "我进来了4" );
            conn.setConnectTimeout(3000);
            Log.e(TAG, "我进来了5" );
            Log.e(TAG, "responseCode"+conn.getResponseCode() );
            if (conn.getResponseCode()==HttpURLConnection.HTTP_OK){
                Log.e(TAG, "conn成功");
                BufferedReader buff=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line;
                StringBuilder build=new StringBuilder();
                while ((line=buff.readLine())!=null){
                    build.append(line);
                }
                JSONObject object=new JSONObject(build.toString());
                String movies = object.getString("movies");
                Gson gson=new Gson();
                Log.e(TAG, "准备回调了");
                mmData=gson.fromJson(movies, new TypeToken<List<MovieData>>(){}.getType());
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }


        return mmData;
    }


}

log

05-03 19:12:22.593 4888-4888/com.example.movieimooc E/ContentValues: onCreate: 
05-03 19:12:22.603 4888-4888/com.example.movieimooc E/ContentValues: onCreateView: 
05-03 19:12:22.681 4888-4888/com.example.movieimooc E/RecyclerView: No adapter attached; skipping layout
05-03 19:12:22.894 4888-4888/com.example.movieimooc E/RecyclerView: No adapter attached; skipping layout
05-03 19:12:25.398 4888-4888/com.example.movieimooc E/RecyclerView: No adapter attached; skipping layout


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

每个Activity或Fragment只有一个LoaderManager,可以在Activity的onCreate()或者Fragment的onActivityCreated()里初始化一个Loader,调用initLoader()。

  • 小巧的蜗牛 提问者 #1
    但是为什么我在这个方法内初始化loader却不会执行loader里面的方法?loader里面 Log.e(TAG, "我进来了1" ); @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // mhotRecycle = (RecyclerView) view.findViewById(R.id.id_hot_moview_recycle); getLoaderManager().initLoader(0,null,this); Log.e(TAG, "onCreateView: " ); } log 05-04 15:48:35.792 4787-4787/? E/ContentValues: onCreate: 05-04 15:48:35.800 4787-4787/? E/ContentValues: onCreateView:
    2018-05-04 15:52:04
  • 小巧的蜗牛 提问者 #2
    提问者慕圣2421162#1 但是为什么我在这个方法内初始化loader却不会执行loader里面的方法?loader里面 Log.e(TAG, "我进来了1" );
    2018-05-04 15:52:55
  • 小巧的蜗牛 提问者 #3
    @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // mhotRecycle = (RecyclerView) view.findViewById(R.id.id_hot_moview_recycle); getLoaderManager().initLoader(0,null,this); Log.e(TAG, "onCreateView: " ); }
    2018-05-04 15:53:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android数据通信开发与应用2018版
  • 参与学习           人
  • 提交作业       147    份
  • 解答问题       687    个

本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师