java.lang.IllegalArgumentException异常:引起主机名称不能为空 [英] Caused by: java.lang.IllegalArgumentException: Host name may not be null

查看:10272
本文介绍了java.lang.IllegalArgumentException异常:引起主机名称不能为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 字符串在我的code。在第一字符串中包含的http:// 时,第二字符串中包含用户主机URL(由用户输入),在第三包含 /musics/a.mp3 第四字符串中包含完整的URL,通过结合previous字符串,如:

 字符串第四=第一+第二+三;

然后我用的AsyncTask 第四字符串的执行,就像这样:

 新JSONAsyncTask()执行(第四)。

和我得到下面的错误。

日志:

  6月10日至七日:17:15.934:E / AndroidRuntime(1194):致命异常:AsyncTask的#1
6月10日至七日:17:15.934:E / AndroidRuntime(1194):了java.lang.RuntimeException:执行doInBackground发生错误()
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在android.os.AsyncTask $ 3.done(AsyncTask.java:278)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:273)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:307)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.lang.Thread.run(Thread.java:856)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):java.lang.IllegalArgumentException异常:致主机名不可以为null
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在org.apache.http.HttpHost<&初始化GT;(HttpHost.java:83)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:497)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在com.app.ifko.HomeActivity $ JSONAsyncTask.doInBackground(HomeActivity.java:101)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在com.app.ifko.HomeActivity $ JSONAsyncTask.doInBackground(HomeActivity.java:1)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在android.os.AsyncTask $ 2.call(AsyncTask.java:264)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
6月10日至七日:17:15.934:E / AndroidRuntime(1194):... 5个
6月10日至七日:17:22.764:E /窗口管理器(1194):活动com.app.ifko.HomeActivity渗漏,最初这里添加窗口com.android.internal.policy.impl.PhoneWindow$DecorView@416b80b0
6月10日至七日:17:22.764:E /窗口管理器(1194):android.view.WindowLeaked:活动com.app.ifko.HomeActivity渗漏窗口com.android.internal.policy.impl.PhoneWindow$DecorView@416b80b0这是原本在这里添加
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.view.ViewRootImpl<&初始化GT;(ViewRootImpl.java:343)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:245)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.view.WindowManagerImpl $ CompatModeWrapper.addView(WindowManagerImpl.java:118)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.view.Window $ LocalWindowManager.addView(Window.java:537)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.Dialog.show(Dialog.java:274)
6月10日至七日:17:22.764:E /窗口管理器(1194):在com.app.ifko.HomeActivity $ JSONAsyncTask.on preExecute(HomeActivity.java:90)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.os.AsyncTask.execute(AsyncTask.java:511)
6月10日至七日:17:22.764:E /窗口管理器(1194):在com.app.ifko.HomeActivity.onCreate(HomeActivity.java:74)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.Activity.performCreate(Activity.java:4465)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.ActivityThread.access $ 600(ActivityThread.java:122)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1146)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.os.Handler.dispatchMessage(Handler.java:99)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.os.Looper.loop(Looper.java:137)
6月10日至七日:17:22.764:E /窗口管理器(1194):在android.app.ActivityThread.main(ActivityThread.java:4340)
6月10日至七日:17:22.764:E /窗口管理器(1194):在java.lang.reflect.Method.invokeNative(本机方法)
6月10日至七日:17:22.764:E /窗口管理器(1194):在java.lang.reflect.Method.invoke(Method.java:511)
6月10日至七日:17:22.764:E /窗口管理器(1194):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
6月10日至七日:17:22.764:E /窗口管理器(1194):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
6月10日至七日:17:22.764:E /窗口管理器(1194):在dalvik.system.NativeStart.main(本机方法)
6月10日至七日:17:24.144:I /流程(1194):发送信号。 PID:1194 SIG:9

活动code:

 公共类HomeActivity延伸活动{串的第一,第二,第三,第四;
TextView的etTextToSave;
私人共享preferences共享preFS;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);    的setContentView(R.layout.home);    etTextToSave =(的TextView)findViewById(R.id.etTextToSave);    共享preFS = getShared preferences(我的preFS,MODE_PRIVATE);
    etTextToSave.setText(共享prefs.getString(共享prefsData,));    。第二= etTextToSave.getText()的toString();    首先=HTTP://;
    第三=/musics/a.mp3;
    第四=第一+第二+三;    .........................    新JSONAsyncTask()执行(第四次);}


解决方案

如果该URL的主机部分来自于用户,必须用它来构建一个URL之前验证它。

不要叫新JSONAsyncTask()执行(第四次); 如果第二为空

I am using four Strings in my code. The first String contains "http://", the second String contains user host URL (entered by user), the third contains "/musics/a.mp3" and the fourth String contains complete URL, by combining the previous Strings, like this:

String fourth = first+second+third;

Then I'm using the fourth String in AsyncTask's execute, like this:

new JSONAsyncTask().execute(fourth);

And I'm getting the error below.

Log:

10-07 06:17:15.934: E/AndroidRuntime(1194): FATAL EXCEPTION: AsyncTask #1
10-07 06:17:15.934: E/AndroidRuntime(1194): java.lang.RuntimeException: An error occured while executing doInBackground()
10-07 06:17:15.934: E/AndroidRuntime(1194):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.lang.Thread.run(Thread.java:856)
10-07 06:17:15.934: E/AndroidRuntime(1194): Caused by: java.lang.IllegalArgumentException: Host name may not be null
10-07 06:17:15.934: E/AndroidRuntime(1194):     at org.apache.http.HttpHost.<init>(HttpHost.java:83)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:497)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at com.app.ifko.HomeActivity$JSONAsyncTask.doInBackground(HomeActivity.java:101)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at com.app.ifko.HomeActivity$JSONAsyncTask.doInBackground(HomeActivity.java:1)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
10-07 06:17:15.934: E/AndroidRuntime(1194):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
10-07 06:17:15.934: E/AndroidRuntime(1194):     ... 5 more
10-07 06:17:22.764: E/WindowManager(1194): Activity com.app.ifko.HomeActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416b80b0 that was originally added here
10-07 06:17:22.764: E/WindowManager(1194): android.view.WindowLeaked: Activity com.app.ifko.HomeActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416b80b0 that was originally added here
10-07 06:17:22.764: E/WindowManager(1194):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:343)
10-07 06:17:22.764: E/WindowManager(1194):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:245)
10-07 06:17:22.764: E/WindowManager(1194):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
10-07 06:17:22.764: E/WindowManager(1194):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
10-07 06:17:22.764: E/WindowManager(1194):  at android.view.Window$LocalWindowManager.addView(Window.java:537)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.Dialog.show(Dialog.java:274)
10-07 06:17:22.764: E/WindowManager(1194):  at com.app.ifko.HomeActivity$JSONAsyncTask.onPreExecute(HomeActivity.java:90)
10-07 06:17:22.764: E/WindowManager(1194):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
10-07 06:17:22.764: E/WindowManager(1194):  at android.os.AsyncTask.execute(AsyncTask.java:511)
10-07 06:17:22.764: E/WindowManager(1194):  at com.app.ifko.HomeActivity.onCreate(HomeActivity.java:74)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.Activity.performCreate(Activity.java:4465)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
10-07 06:17:22.764: E/WindowManager(1194):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-07 06:17:22.764: E/WindowManager(1194):  at android.os.Looper.loop(Looper.java:137)
10-07 06:17:22.764: E/WindowManager(1194):  at android.app.ActivityThread.main(ActivityThread.java:4340)
10-07 06:17:22.764: E/WindowManager(1194):  at java.lang.reflect.Method.invokeNative(Native Method)
10-07 06:17:22.764: E/WindowManager(1194):  at java.lang.reflect.Method.invoke(Method.java:511)
10-07 06:17:22.764: E/WindowManager(1194):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-07 06:17:22.764: E/WindowManager(1194):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-07 06:17:22.764: E/WindowManager(1194):  at dalvik.system.NativeStart.main(Native Method)
10-07 06:17:24.144: I/Process(1194): Sending signal. PID: 1194 SIG: 9

Activity code:

public class HomeActivity extends Activity {

String first, second, third, fourth;
TextView etTextToSave;
private SharedPreferences  sharedprefs; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.home);

    etTextToSave = (TextView) findViewById(R.id.etTextToSave);      

    sharedprefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    etTextToSave.setText(sharedprefs.getString("SharedPrefsData",""));

    second = etTextToSave.getText().toString();     

    first = "http://";
    third = "/musics/a.mp3";            
    fourth = first+second+third;

    .........................

    new JSONAsyncTask().execute(fourth);

}

解决方案

If the host part of the URL comes from the user, you must validate it before using it to construct a URL.

Don't call new JSONAsyncTask().execute(fourth); if second is null.

这篇关于java.lang.IllegalArgumentException异常:引起主机名称不能为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆