2015-09-22 2 views
0

Я пытаюсь вызвать метод execute класса GetMethodExample с расширенным AsyncTask, но он показывает мне ошибку, которую метод выполняет для метода GetMethodExpmle. Вот мой код.AsyncTask Выполнить метод, показывающий ошибку

GetMethodExample.java:

package com.shehryar.httpclient; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URI; 
import java.net.URISyntaxException; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.os.AsyncTask; 
public class GetMethodExample extends AsyncTask<String, Integer, String>{ 



@Override 
protected String doInBackground(String... params) { 
    // TODO Auto-generated method stub 
    BufferedReader in = null; 
    String data = null; 
    try { 
     HttpClient client = new DefaultHttpClient(); 

     HttpGet request = new HttpGet(); 
     URI website= new URI(params[0]); 
     request.setURI(website); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String l = ""; 
     String nl = System.getProperty("line.seperator"); 
     while ((l = in.readLine()) != null) { 
      sb.append(l + nl); 
     } 
     in.close(); 
     data = sb.toString(); 
     return data; 
    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
       return data; 
      } catch (Exception e) { 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
    return null; 
} 


} 

// MainActivity

HttpExample.java:

package com.shehryar.httpclient; 

import java.util.concurrent.ExecutionException; 

import com.shehryar.httpclient.R.layout; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class HttpExample extends Activity { 

TextView httpstuff; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.httpex); 
    httpstuff=(TextView) findViewById(R.id.tvhttp); 
    String data; 
    String website="http://www.google.com"; 
    String extra=""; 
    try { 
     GetMethodExample obj= new GetMethodExample(); 
     data=obj.execute(website).get(); //Here is the error 
     httpstuff.setText(data); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     httpstuff.setText("Error:" + e.toString()); 
    } catch (ExecutionException e) { 
     // TODO Auto-generated catch block 
     httpstuff.setText("Error:" + e.toString()); 
    } 
} 
} 
+0

Это выглядит нормально, можете ли вы отправить точное сообщение об ошибке, которое вы получаете? – Buddy

+2

И вы, скорее всего, не хотите использовать '.get()'. Это поднимает тему пользовательского интерфейса – codeMagic

+1

Покажите свой логарифм. –

ответ

0

Благодаря Kris Larson за ответ, но я получил мой код работает только после перезагрузки затмения. Мой код был в порядке, но это было затмение, которое создавало проблемы

1
data=obj.execute(website).get(); //Here is the error 

Вы пытаетесь получить данные синхронно от AsyncTask.

Во-первых, вы начинаете задачу:

obj.execute(website); 

Тогда вы переопределять onPostExecute() в вашем AsyncTask, чтобы справиться с отделкой:

@Override 
public void onPostExecute(String data) { 

    httpstuff.setText(data); 
} 

Теперь-то вы должны дать AsyncTask ссылку на ваш Activity или ваш TextView, так что вы можете обновить интерфейс пользователя в onPostExecute().

Перейдите в справочные документы по адресу AsyncTask, чтобы понять, как взаимодействуют потоки и какие методы запускаются в потоке.

AsyncTask | Android Developers

+0

иначе вы можете использовать другие сетевые библиотеки, такие как Retrofit, Volley :) asyntask медленнее, чем эти библиотеки –

Смежные вопросы