【问题标题】:can someone help me to fix my android AsyncTask?有人可以帮我修复我的 android AsyncTask 吗?
【发布时间】:2014-02-06 09:10:38
【问题描述】:

我正在尝试检查服务器是否可用并且收到此错误:

01-17 08:02:42.140: E/AndroidRuntime(10317): FATAL EXCEPTION: AsyncTask #1
01-17 08:02:42.140: E/AndroidRuntime(10317): java.lang.RuntimeException: An error occured while executing doInBackground()
01-17 08:02:42.140: E/AndroidRuntime(10317):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.lang.Thread.run(Thread.java:856)
01-17 08:02:42.140: E/AndroidRuntime(10317): Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=www.novusmedia.co.za
01-17 08:02:42.140: E/AndroidRuntime(10317):    at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at com.Novusmedia.Transact.UserFormActivity$MyAsyncTask.doInBackground(UserFormActivity.java:64)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-17 08:02:42.140: E/AndroidRuntime(10317):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

这是我的代码:

TextView txtErrorMsg;

private class MyAsyncTask extends AsyncTask<String, String, JSONObject> {
    JSONObject json;

    @Override
    protected JSONObject doInBackground(String... params) {

        String host = "my_url";
        GamerFunctions gamerFunction = new GamerFunctions();

        HttpParams httpParams = new BasicHttpParams();
        int timeout = 100;
        HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
        HttpConnectionParams.setSoTimeout(httpParams, timeout);
        HttpClient client = new DefaultHttpClient(httpParams);

        try {
            HttpGet request = new HttpGet(new URI(host));
            HttpResponse response = client.execute(request);
            StatusLine status = response.getStatusLine();
            if (status.getStatusCode() == HttpStatus.SC_OK) {
                if (params.length != 3)
                    return null;
                json = gamerFunction.addNewGamer(params[0], params[1],
                        params[2]);

            } else {
                // update ui thread

            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            // txtErrorMsg.setText("timeout!!!");

        } catch (IOException e) {
            e.printStackTrace();
            // txtErrorMsg.setText("timeout!!!");

        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return json;
    }
}

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();

    if (netInfo != null && netInfo.isConnectedOrConnecting()
            && cm.getActiveNetworkInfo().isAvailable()
            && cm.getActiveNetworkInfo().isConnected()) {
        return true;
    }
    return false;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_form);

    final boolean isOnline = isOnline();
    ImageButton btnPlay = (ImageButton) findViewById(R.id.btnSubmit);
    final EditText txtName = (EditText) findViewById(R.id.txtName);
    final EditText txtPhone = (EditText) findViewById(R.id.txtContact);
    final EditText txtpharmacy = (EditText) findViewById(R.id.txtPharmacy);
    txtErrorMsg = (TextView) findViewById(R.id.txtErromsg);

    btnPlay.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            String name = txtName.getText().toString();
            String phone = txtPhone.getText().toString();
            String pharmacy = txtpharmacy.getText().toString();

            if (name.isEmpty() || phone.isEmpty() || pharmacy.isEmpty()) {
                txtErrorMsg.setText("All fields are mandatory");
            } else {
                if (phone.length() != 10) {
                    txtErrorMsg.setText("Phone must be 10 characters");
                } else {
                    if (isOnline) {
                        txtErrorMsg.setTextColor(Color
                                .parseColor("#006600"));
                        txtErrorMsg.setText("wait game to load......");
                        new MyAsyncTask().execute(name, phone, pharmacy);
                        // startActivity(new Intent(UserFormActivity.this,
                        // GameActivity.class));
                    } else {
                        txtErrorMsg
                                .setText("please check your internet settings!!!");
                    }

                }
            }

        }
    });
}

【问题讨论】:

  • 第 305 行在哪里
  • 你还没有添加协议。在您的网址前添加 http://。
  • @atebsy:这个建议有效吗?
  • 是的,谢谢它的工作问题是我只需要添加“http://”的协议
  • 但我还在论坛上找到了另一个代码,它运行良好且时间较短

标签: android android-asynctask


【解决方案1】:

您传递的 URI 的问题,即,

String host = "my_url";

Refer this , this

【讨论】:

    【解决方案2】:

    目标主机不能为空,也不能在参数中设置。方案=null,主机=null,路径=www.novusmedia.co.za

    日志中的这一行说 url 不正确。请检查是否添加了“http://”

    【讨论】:

      【解决方案3】:
      @Override
      protected JSONObject doInBackground(String... params) {
      
          //replace your request url from the "my_url"
          String host = "my_url";// <= here
          GamerFunctions gamerFunction = new GamerFunctions();
      
          HttpParams httpParams = new BasicHttpParams();
      

      【讨论】:

        猜你喜欢
        • 2021-04-04
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多