使得Android的使用AsyncTask的远程服务器呼叫时Illigal性格异常 [英] Illigal character exception when making a remote server call using AsyncTask in Android

查看:133
本文介绍了使得Android的使用AsyncTask的远程服务器呼叫时Illigal性格异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的code:

 包com.problemio;进口java.io.BufferedReader中;
进口的java.io.InputStream;
进口java.io.InputStreamReader中;
进口的java.util.ArrayList;进口org.apache.http.HttpEntity;
进口org.apache.http.Htt presponse;
进口org.apache.http.NameValuePair;
进口org.apache.http.client.HttpClient;
进口org.apache.http.client.entity.UrlEn codedFormEntity;
进口org.apache.http.client.methods.HttpGet;
进口org.apache.http.client.methods.HttpPost;
进口org.apache.http.impl.client.DefaultHttpClient;
进口org.apache.http.message.BasicNameValuePair;进口android.app.Activity;
进口android.content.Intent;
进口android.os.AsyncTask;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.TextView;公共类LoginActivity扩展活动
{
    私人TextView的TextView的;    公共无效的onCreate(捆绑savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.login);        //显示为LOGIN_EMAIL形式
        最终的EditText表示loginEmail =(EditText上)findViewById(R.id.login_email);
        字符串名称= loginEmail.getText()的toString()。        //显示为密码字段
        最终的EditText密码=(EditText上)findViewById(R.id.password);
        字符串文本= password.getText()的toString()。        //显示按钮提交
        按钮提交=(按钮)findViewById(R.id.submit);
        //为打造知名度的显示选项和忘记密码        // readWebpage(R.layout.login);
        submit.setOnClickListener(新Button.OnClickListener()
        {
           公共无效的onClick(视图v)
           {
              。字符串email = loginEmail.getText()的toString();
              。字符串传递= password.getText()的toString();
              sendFeedback(通过电子邮件);
            }
        });
    }
    公共无效sendFeedback(字符串传递,字符串email)
    {
        Log.d(1,通);
        Log.d(1,电子邮件);        的String [] = PARAMS新的String [] {URL,电子邮件,通};
        DownloadWebPageTask任务=新DownloadWebPageTask();
        task.execute(PARAMS);
    }    私有类DownloadWebPageTask扩展的AsyncTask<弦乐,太虚,字符串>
    {
        @覆盖
        保护字符串doInBackground(字符串... theParams)
        {
            Log.d(内部类,在后台做的东西);            串myUrl = theParams [0];
            串myEmail = theParams [1];
            串MYPASSWORD = theParams [2];            ArrayList的<&的NameValuePair GT; postParameters =新的ArrayList<&的NameValuePair GT;();
            postParameters.add(新BasicNameValuePair(用户名,myEmail));
            postParameters.add(新BasicNameValuePair(密码,MYPASSWORD));            串响应=;
            对于(字符串URL:theParams)
            {
                DefaultHttpClient客户端=新DefaultHttpClient();
                HTTPGET HTTPGET =新HTTPGET(URL);
                尝试
                {
                    HTT presponse执行= client.execute(HTTPGET);
                    InputStream的内容= execute.getEntity()的getContent()。                    的BufferedReader缓冲=新的BufferedReader(
                            新的InputStreamReader(内容));
                    字符串s =;
                    而((S = buffer.readLine())!= NULL){
                        响应+ = S;
                    }                }
                赶上(例外五)
                {
                    e.printStackTrace();
                }
            }
            返回响应;
        }
        @覆盖
        保护无效onPostExecute(字符串结果)
        {
            Log.d(后执行,在后执行法);
            textView.setText(结果);
        }
    }        公共无效readWebpage(查看视图)
        {
            Log.d(读取网页:,以读出网页方法);
            DownloadWebPageTask任务=新DownloadWebPageTask();
            task.execute(新的String [] {http://www.problemio.com/auth/mobile_login.php});
        }
}

和我得到这个异​​常:

  12月2日至23日:29:59.078:D / gralloc_goldfish(1799):无仿真模拟GPU检测。
十二月2日至23日:32:12.797:D / dalvikvm(1799):GC_CONCURRENT释放204K,4%免​​费9268K / 9607K,暂停30毫秒+ 8ms的
十二月2日至23日:32:16.327:D / 1(1799):123
十二月2日至23日:32:16.327:D / 1(1799):你好
十二月2日至23日:32:16.377:D /内部类:(1799):在后台做的东西
十二月2日至23日:32:16.977:W / System.err的(1799):java.lang.IllegalStateException:目标主机不能为空,或参数进行设置。方案= NULL,主机= NULL,PATH =你好
十二月2日至23日:32:16.977:W / System.err的(1799):在org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
十二月2日至23日:32:16.987:W / System.err的(1799):在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
十二月2日至23日:32:16.987:W / System.err的(1799):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
十二月2日至23日:32:16.987:W / System.err的(1799):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
十二月2日至23日:32:16.998:W / System.err的(1799):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
十二月2日至23日:32:16.998:W / System.err的(1799):在com.problemio.LoginActivity $ DownloadWebPageTask.doInBackground(LoginActivity.java:140)
十二月2日至23日:32:17.007:W / System.err的(1799):在com.problemio.LoginActivity $ DownloadWebPageTask.doInBackground(LoginActivity.java:1)
十二月2日至23日:32:17.017:W / System.err的(1799):在android.os.AsyncTask $ 2.call(AsyncTask.java:264)
十二月2日至23日:32:17.017:W / System.err的(1799):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
十二月2日至23日:32:17.017:W / System.err的(1799):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
十二月2日至23日:32:17.027:W / System.err的(1799):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)
十二月2日至23日:32:17.037:W / System.err的(1799):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
十二月2日至23日:32:17.037:W / System.err的(1799):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
十二月2日至23日:32:17.037:W / System.err的(1799):在java.lang.Thread.run(Thread.java:856)
十二月2日至23日:32:17.057:W / System.err的(1799):java.lang.IllegalStateException:目标主机不能为空,或参数进行设置。方案= NULL,主机= NULL,PATH = 123
十二月2日至23日:32:17.057:W / System.err的(1799):在org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
十二月2日至23日:32:17.068:W / System.err的(1799):在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
十二月2日至23日:32:17.068:W / System.err的(1799):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
十二月2日至23日:32:17.068:W / System.err的(1799):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
十二月2日至23日:32:17.077:W / System.err的(1799):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
十二月2日至23日:32:17.077:W / System.err的(1799):在com.problemio.LoginActivity $ DownloadWebPageTask.doInBackground(LoginActivity.java:140)
十二月2日至23日:32:17.087:W / System.err的(1799):在com.problemio.LoginActivity $ DownloadWebPageTask.doInBackground(LoginActivity.java:1)
十二月2日至23日:32:17.087:W / System.err的(1799):在android.os.AsyncTask $ 2.call(AsyncTask.java:264)
十二月2日至23日:32:17.087:W / System.err的(1799):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
十二月2日至23日:32:17.097:W / System.err的(1799):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
十二月2日至23日:32:17.097:W / System.err的(1799):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)
十二月2日至23日:32:17.097:W / System.err的(1799):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
十二月2日至23日:32:17.107:W / System.err的(1799):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
十二月2日至23日:32:17.107:W / System.err的(1799):在java.lang.Thread.run(Thread.java:856)
十二月2日至23日:32:17.107:D /后执行:(1799):在后执行方法
十二月2日至23日:32:17.107:D / AndroidRuntime(1799):关闭VM
十二月2日至23日:32:17.107:W / dalvikvm(1799):主题ID = 1:螺纹未捕获的异常(组= 0x409c01f8)退出
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):致命异常:主要
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):显示java.lang.NullPointerException
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在com.problemio.LoginActivity $ DownloadWebPageTask.onPostExecute(LoginActivity.java:164)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在com.problemio.LoginActivity $ DownloadWebPageTask.onPostExecute(LoginActivity.java:1)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在android.os.AsyncTask.finish(AsyncTask.java:602)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在android.os.AsyncTask.access $ 600(AsyncTask.java:156)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:615)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在android.os.Handler.dispatchMessage(Handler.java:99)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在android.os.Looper.loop(Looper.java:137)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在android.app.ActivityThread.main(ActivityThread.java:4424)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在java.lang.reflect.Method.invokeNative(本机方法)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在java.lang.reflect.Method.invoke(Method.java:511)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
十二月2日至23日:32:17.138:E / AndroidRuntime(1799):在dalvik.system.NativeStart.main(本机方法)


解决方案

替换为:

 为(字符串URL:theParams)
        {
            DefaultHttpClient客户端=新DefaultHttpClient();
            HTTPGET HTTPGET =新HTTPGET(URL);

这一点:

  DefaultHttpClient客户端=新DefaultHttpClient();
 HTTPGET HTTPGET =新HTTPGET(myUrl);

此外,你不使用 postParameters 变量。

I have this code:

package com.problemio;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class LoginActivity extends Activity 
{
    private TextView textView;

    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        // Show form for login_email
        final EditText loginEmail = (EditText) findViewById(R.id.login_email);  
        String name = loginEmail.getText().toString();  

        // Show field for password  
        final EditText password = (EditText) findViewById(R.id.password);  
        String text = password.getText().toString();                  

        // Show button for submit
        Button submit = (Button)findViewById(R.id.submit);   




        // Show options for create-profile and forgot-password

        //readWebpage( R.layout.login) ;


        submit.setOnClickListener(new Button.OnClickListener() 
        {  
           public void onClick(View v) 
           {
              String email = loginEmail.getText().toString();
              String pass = password.getText().toString(); 
              sendFeedback(pass, email);
            }
        });        
    }


    public void sendFeedback(String pass , String email) 
    {  
        Log.d( "1" , pass );
        Log.d( "1" , email );

        String[] params = new String[] { "url", email, pass };


        DownloadWebPageTask task = new DownloadWebPageTask();
        task.execute(params);        
    }          



    private class DownloadWebPageTask extends AsyncTask<String, Void, String> 
    {
        @Override
        protected String doInBackground(String... theParams) 
        {
            Log.d( "Inner class: " , "Doing stuff in background" );

            String myUrl = theParams[0];
            String myEmail = theParams[1];
            String myPassword = theParams[2];

            ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();  
            postParameters.add(new BasicNameValuePair("username", myEmail ));  
            postParameters.add(new BasicNameValuePair("password", myPassword ));            

            String response = "";
            for (String url : theParams) 
            {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try 
                {
                    HttpResponse execute = client.execute(httpGet);
                    InputStream content = execute.getEntity().getContent();

                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(content));
                    String s = "";
                    while ((s = buffer.readLine()) != null) {
                        response += s;
                    }

                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
            return response;
        }


        @Override
        protected void onPostExecute(String result) 
        {
            Log.d( "Post execute: " , "In the post-execute method" );
            textView.setText(result);
        }    
    }

        public void readWebpage(View view) 
        {
            Log.d( "Read webpage: " , "In the read webpage method" );
            DownloadWebPageTask task = new DownloadWebPageTask();
            task.execute(new String[] { "http://www.problemio.com/auth/mobile_login.php" });
        }        
}

and I get this exception:

02-23 12:29:59.078: D/gralloc_goldfish(1799): Emulator without GPU emulation detected.
02-23 12:32:12.797: D/dalvikvm(1799): GC_CONCURRENT freed 204K, 4% free 9268K/9607K, paused 30ms+8ms
02-23 12:32:16.327: D/1(1799): 123
02-23 12:32:16.327: D/1(1799): hello
02-23 12:32:16.377: D/Inner class:(1799): Doing stuff in background
02-23 12:32:16.977: W/System.err(1799): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=hello
02-23 12:32:16.977: W/System.err(1799):     at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
02-23 12:32:16.987: W/System.err(1799):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
02-23 12:32:16.987: W/System.err(1799):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
02-23 12:32:16.987: W/System.err(1799):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-23 12:32:16.998: W/System.err(1799):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
02-23 12:32:16.998: W/System.err(1799):     at com.problemio.LoginActivity$DownloadWebPageTask.doInBackground(LoginActivity.java:140)
02-23 12:32:17.007: W/System.err(1799):     at com.problemio.LoginActivity$DownloadWebPageTask.doInBackground(LoginActivity.java:1)
02-23 12:32:17.017: W/System.err(1799):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-23 12:32:17.017: W/System.err(1799):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-23 12:32:17.017: W/System.err(1799):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-23 12:32:17.027: W/System.err(1799):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-23 12:32:17.037: W/System.err(1799):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-23 12:32:17.037: W/System.err(1799):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-23 12:32:17.037: W/System.err(1799):     at java.lang.Thread.run(Thread.java:856)
02-23 12:32:17.057: W/System.err(1799): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=123
02-23 12:32:17.057: W/System.err(1799):     at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
02-23 12:32:17.068: W/System.err(1799):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
02-23 12:32:17.068: W/System.err(1799):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
02-23 12:32:17.068: W/System.err(1799):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-23 12:32:17.077: W/System.err(1799):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
02-23 12:32:17.077: W/System.err(1799):     at com.problemio.LoginActivity$DownloadWebPageTask.doInBackground(LoginActivity.java:140)
02-23 12:32:17.087: W/System.err(1799):     at com.problemio.LoginActivity$DownloadWebPageTask.doInBackground(LoginActivity.java:1)
02-23 12:32:17.087: W/System.err(1799):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-23 12:32:17.087: W/System.err(1799):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-23 12:32:17.097: W/System.err(1799):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-23 12:32:17.097: W/System.err(1799):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-23 12:32:17.097: W/System.err(1799):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-23 12:32:17.107: W/System.err(1799):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-23 12:32:17.107: W/System.err(1799):     at java.lang.Thread.run(Thread.java:856)
02-23 12:32:17.107: D/Post execute:(1799): In the post-execute method
02-23 12:32:17.107: D/AndroidRuntime(1799): Shutting down VM
02-23 12:32:17.107: W/dalvikvm(1799): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
02-23 12:32:17.138: E/AndroidRuntime(1799): FATAL EXCEPTION: main
02-23 12:32:17.138: E/AndroidRuntime(1799): java.lang.NullPointerException
02-23 12:32:17.138: E/AndroidRuntime(1799):     at com.problemio.LoginActivity$DownloadWebPageTask.onPostExecute(LoginActivity.java:164)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at com.problemio.LoginActivity$DownloadWebPageTask.onPostExecute(LoginActivity.java:1)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at android.os.AsyncTask.finish(AsyncTask.java:602)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at android.os.AsyncTask.access$600(AsyncTask.java:156)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at android.os.Looper.loop(Looper.java:137)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at android.app.ActivityThread.main(ActivityThread.java:4424)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at java.lang.reflect.Method.invokeNative(Native Method)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at java.lang.reflect.Method.invoke(Method.java:511)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-23 12:32:17.138: E/AndroidRuntime(1799):     at dalvik.system.NativeStart.main(Native Method)

解决方案

Replace the for:

for (String url : theParams) 
        {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);

With this:

 DefaultHttpClient client = new DefaultHttpClient();
 HttpGet httpGet = new HttpGet(myUrl);

Also, you're not using the postParameters variable.

这篇关于使得Android的使用AsyncTask的远程服务器呼叫时Illigal性格异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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