空指针异常,mClient为空

来源:5-6 多线程下载网络请求实现-2

慕粉1610333529

2017-04-05


public class MainActivity extends AppCompatActivity {

    private ImageView img_show;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        img_show=(ImageView) findViewById(R.id.image);

        File file=FileStorageManager.getInstance().getFileByName("http://www.imooc.com");

        Logger.debug("nate","file path = "+ file.getAbsolutePath());

        HttpManager.getInstance().asyncRequest("http://img.mukewang.com/58c8b8810001984d04680100.jpg",

                new DownloadCallback() {

                    @Override

                    public void success(File file) {

                        final Bitmap bitmap= BitmapFactory.decodeFile(file.getAbsolutePath());

                        runOnUiThread(new Runnable() {

                            @Override

                            public void run() {

                                img_show.setImageBitmap(bitmap);

                            }

                        });

                        Logger.debug("nate","success"+file.getAbsolutePath());

                    }


                    @Override

                    public void fail(int errorCode, String errorMessage) {

                        Logger.debug("nate","fail"+errorCode+" "+errorMessage);

                    }


                    @Override

                    public void progress(int progress) {


                    }

                });

    }

}

public class HttpManager {
   private static final HttpManager sManager=new HttpManager();
   public static final int NETWORK_CODE=1;
   private OkHttpClient mClient;
   private Context mContext;
   public static HttpManager getInstance(){
       return sManager;
   }
   public void init(Context context){
       this.mContext=context;
   }
   public Response syncReuqest(String url){
       Request request=new Request.Builder().url(url).build();
       try {
           return mClient.newCall(request).execute();
       } catch (IOException e) {
           e.printStackTrace();
       }
       return null;
   }
   public void asyncRequest(final String url,final DownloadCallback callback){
       Request request=new Request.Builder().url(url).build();
       mClient.newCall(request).enqueue(new Callback() {
           @Override
           public void onFailure(Call call, IOException e) {

           }

           @Override
           public void onResponse(Call call, Response response) throws IOException {
               if (!response.isSuccessful()&&callback!=null){
                   callback.fail(NETWORK_CODE,"请求失败");
               }
               File file= FileStorageManager.getInstance().getFileByName(url);
               byte[]buffer=new byte[1024 * 500];
               int len;
               FileOutputStream fileOutputStream=new FileOutputStream(file);
               InputStream inputStream=response.body().byteStream();
               while ((len=inputStream.read(buffer,0,buffer.length))!=-1){
                   fileOutputStream.write(buffer,0,len);
                   fileOutputStream.flush();
               }
               callback.success(file);
           }
       });
   }
}

  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'okhttp3.Call okhttp3.OkHttpClient.newCall(okhttp3.Request)' on a null object reference

                                                                            at com.imooc.download.http.HttpManager.asyncRequest(HttpManager.java:45)

                                                                            at com.dylan.cn.practice2.MainActivity.onCreate(MainActivity.java:26)

                                                                            at android.app.Activity.performCreate(Activity.java:6679)

                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)

                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)

                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 

                                                                            at android.app.ActivityThread.-wrap12(ActivityThread.java) 

                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 

                                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 

                                                                            at android.os.Looper.loop(Looper.java:154) 



写回答

1回答

rainbow_cai

2017-04-12

HttpManager类中没有获取OkHttpClient的对象。少了以下这一段代码:

     private HttpManager(){
           mClient = new OkHttpClient();
    }

0
0

Android架构师之路 网络层架构设计与实战

跟着大牛,从底层开始,打造自己的Retrofit网络框架

558 学习 · 65 问题

查看课程