2014-10-07 110 views
0

我正在使用four字符串在我的代码中。该first字符串包含“http://”,该second字符串包含用户主机URL(由用户输入),该third包含“/musics/a.mp3”和fourth字符串包含完整的URL,通过将以前的字符串,像这样:引起:java.lang.IllegalArgumentException:主机名不能为空

String fourth = first+second+third; 

然后我使用fourth字符串中AsyncTask的执行,就像这样:

new JSONAsyncTask().execute(fourth); 

而且我得到下面的错误。

登录:

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 [email protected] 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 [email protected] 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 

活动代码:

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); 

} 
+0

是它的空,但我怎么能控制这个异常? – Sophie 2014-10-07 06:45:39

+1

在新的JSONAsyncTask()。执行(第四次)之前放置'Log'或'SOP';'并检查你的第四个字符串是什么。 – Rustam 2014-10-07 06:45:47

+0

登录asynctask的网址?我想你的'第二'只包含sharedPrefs中的“”。 – 2014-10-07 06:45:57

回答

1

如果该URL的主机部分来自于用户,必须用它来构建一个URL之前验证它。如果second为空,则不要致电new JSONAsyncTask().execute(fourth);

0

如果您在onCreate()中致电etTextToSave.getText(),则返回的文本将是布局中的默认值,而不是用户输入的内容。

如果您使用的是onclick侦听程序或类似程序,则不会显示该代码,但如果您是这样,请将getText()移至点击处理程序。

相关问题