空指针异常,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();
}00
相似问题