您的位置:首页 > 理论基础 > 计算机网络

NoHttp报错之Please invoke NoHttp.initialize(Application) on Application#onCreate()

2016-07-29 14:24 465 查看

先来看看报错内容吧

07-29 14:03:18.860 2557-2557/wlj.com.nohttp E/AndroidRuntime: FATAL EXCEPTION: main
Process: wlj.com.nohttp, PID: 2557
java.lang.ExceptionInInitializerError: Please invoke NoHttp.initialize(Application) on Application#onCreate()
at com.yolanda.nohttp.NoHttp.getContext(NoHttp.java:548)
at com.yolanda.nohttp.cache.CacheDisk.<init>(CacheDisk.java:47)
at com.yolanda.nohttp.cache.CacheDiskManager.<init>(CacheDiskManager.java:39)
at com.yolanda.nohttp.cache.CacheDiskManager.getInstance(CacheDiskManager.java:44)
at com.yolanda.nohttp.cache.DiskCacheStore.<init>(DiskCacheStore.java:47)
at com.yolanda.nohttp.cache.DiskCacheStore.<clinit>(DiskCacheStore.java:34)
at com.yolanda.nohttp.NoHttp.newRequestQueue(NoHttp.java:179)
at com.yolanda.nohttp.NoHttp.newRequestQueue(NoHttp.java:165)
at wlj.com.nohttp.App.initOnHttp(App.java:25)
at wlj.com.nohttp.MainActivity.onCreate(MainActivity.java:34)
at android.app.Activity.performCreate(Activity.java:6374)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2743)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2855)
at android.app.ActivityThread.access$900(ActivityThread.java:181)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1474)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6117)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)


我从网上把jar包下载下来,本来只是写了一个很简单的网络请求,结果就爆出来这样的错误,提示说是:Please invoke NoHttp.initialize(Application) on Application#onCreate(),那么这句话意思是说让我们在application要进行初始化,没办法我们就要在application中进行初始化了,看作者给的demo中有这样一行代码

NoHttp.init(this);


那么这行代码就是在application中,不过现在这个放法过时了,换成了是

NoHttp.initialize(this);


好了,看看我写的代码,很简单的一个网络请求

application中的代码:

package wlj.com.nohttp;

import android.app.Application;

import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.rest.RequestQueue;

/**
* @author wlj
* @date 2016/7/29
* @packagename wlj.com.nohttp
*/
public class App extends Application {

private static RequestQueue requestQueue;

@Override
public void onCreate() {
super.onCreate();
NoHttp.initialize(this);
}
//静态的,直接点调用
public  static RequestQueue initOnHttp() {
requestQueue = NoHttp.newRequestQueue();
return requestQueue;
}
}


mainActivity中的代码:

package wlj.com.nohttp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.RequestMethod;
import com.yolanda.nohttp.rest.OnResponseListener;
import com.yolanda.nohttp.rest.Request;
import com.yolanda.nohttp.rest.RequestQueue;
import com.yolanda.nohttp.rest.Response;

public class MainActivity extends Activity implements View.OnClickListener {
//用来分是哪次请求
private static final int NOHTTP_WHAT_TEST = 0x001;

private Button btn1;
private TextView tv1;
//一个天气预报的开发接口
private String url = "http://mobile.weather.com.cn/data/news/khdjson.htm?_=1381891660018";
private Request<String> stringRequest;
private RequestQueue requestQueue;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn1);
tv1 = (TextView) findViewById(R.id.tv);
btn1.setOnClickListener(this);
requestQueue = App.initOnHttp();
}

@Override
public void onClick(View v) {
stringRequest = NoHttp.createStringRequest(url, RequestMethod.GET);
switch (v.getId()) {
//当点击按钮是触发的事件
case R.id.btn1:
requestQueue.add(NOHTTP_WHAT_TEST, stringRequest, new OnResponseListener<String>() {
@Override
public void onStart(int i) {

}

@Override
public void onSucceed(int i, Response<String> response) {
String s = response.get();
tv1.setText(s);
}

@Override
public void onFailed(int i, String s, Object o, Exception e, int i1, long l) {

}

@Override
public void onFinish(int i) {

}
});
break;
}
}
}


布局文件也是很简单:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="wlj.com.nohttp.MainActivity">

<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请求网络1" />

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>


最后来看运行效果吧



ps 如果觉得对你有用,就点赞吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: