java.lang.NullPointerException at com.android.volley.Request.<init>(Request.java:148)

本文分析了使用Android Volley库时遇到的NullPointerException问题,并给出了具体的解决方案,包括如何检查和修正URL路径。

在使用android Volley的时候可能会出现像下面的错误  

java.lang.NullPointerException

at com.android.volley.Request.<init>(Request.java:148)
at com.android.volley.toolbox.JsonRequest.<init>(JsonRequest.java:58)
at com.android.volley.toolbox.JsonObjectRequest.<init>(JsonObjectRequest.java:48)
at com.einshow.beautyzhejiang.fragment.LoginFragment$3.<init>(LoginFragment.java:141)
at com.einshow.beautyzhejiang.fragment.LoginFragment.volleyRquestHttpForPost(LoginFragment.java:149)
at com.einshow.beautyzhejiang.fragment.LoginFragment.onClick(LoginFragment.java:111)
at android.view.View.performClick(View.java:4211)
at android.view.View$PerformClick.run(View.java:17446)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5320)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

at dalvik.system.NativeStart.main(Native Method)


我Debug了一下 

public Request(int method, String url, Response.ErrorListener listener) {
mMethod = method;
mUrl = url;
mErrorListener = listener;
setRetryPolicy(new DefaultRetryPolicy());
mDefaultTrafficStatsTag = TextUtils.isEmpty(url) ? 0 : Uri.parse(url)
.getHost().hashCode();
}

出现错误的在Uri.parse(url)
.getHost().hashCode()为空 ------》更精确的说是Uri.parse(url).getHost()=null 

结果很明显了是你的路径出问题了 

建议 添加判断或者正则来对路径进行判断 使你的app更加强壮

Perl中,`rand`函数产生的是伪随机数,若不设置合适的随机数种子,每次运行程序时它会产生相同的随机数序列。为使`for`循环每次都能生成不同的随机数序列,可采用以下几种方法设置随机数种子: #### 使用时间作为种子 利用`time`函数返回当前的时间戳,由于每次运行程序的时间不同,所以能得到不同的随机数序列。 ```perl #!/usr/bin/perl use strict; use warnings; # 使用时间作为种子 srand(time); for (1..5) { print rand(10), " "; } print "\n"; ``` #### 使用进程ID作为种子 进程ID(`$$`)在每次程序运行时都是唯一的,可将其作为随机数种子。 ```perl #!/usr/bin/perl use strict; use warnings; # 使用进程ID作为种子 srand($$); for (1..5) { print rand(10), " "; } print "\n"; ``` #### 使用随机设备文件作为种子 在类Unix系统中,可以从`/dev/urandom`或`/dev/random`读取随机数据作为种子。 ```perl #!/usr/bin/perl use strict; use warnings; open(my $urandom, '<', '/dev/urandom') or die "Can't open /dev/urandom: $!"; my $seed; read($urandom, $seed, 4); close($urandom); my $numeric_seed = unpack('L', $seed); srand($numeric_seed); for (1..5) { print rand(10), " "; } print "\n"; ``` #### 使用计数器作为种子 在程序中维护一个计数器,每次需要新的随机数序列时,将计数器的值作为种子,并递增计数器。 ```perl #!/usr/bin/perl use strict; use warnings; my $counter = 1; # 第一个随机数序列 srand($counter++); for (1..5) { print rand(10), " "; } print "\n"; # 第二个随机数序列 srand($counter++); for (1..5) { print rand(10), " "; } print "\n"; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值