2012-06-04 6 views
1

Я попытался использовать объект AsyncTask для подключения моего приложения к удаленному серверу. Вот мой код:probleme with AsyncTask: выполнить

public class ConnectServer extends AsyncTask<Void, Void, Void> { 

    String IP = ""; 
    InputStream is = null; 
    JSONObject json_data = null; 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    ArrayList<String> donnees = new ArrayList<String>(); 

    @Override 
    protected Void doInBackground(Void... params) { 

     // TODO Auto-generated method stub 
     IP = "http://192.168.101.1/fichier.php"; 
     nameValuePairs.add(new BasicNameValuePair("nom", envois.nom)); 
     nameValuePairs.add(new BasicNameValuePair("prenom", envois.prenom)); 
     nameValuePairs.add(new BasicNameValuePair("nationalite", envois.nationalite)); 
     nameValuePairs.add(new BasicNameValuePair("passeport", envois.passeport)); 

     try { 
      //commandes httpClient 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(IP); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
      Log.i("tag", "depuis json"); 
     } 
     catch (Exception e) { 
      Log.i("taghttppost", "" + e.toString()); 
      Toast.makeText(c, e.toString(), Toast.LENGTH_LONG).show(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPreExecute() { 

     // TODO Auto-generated method stub 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     Toast.makeText(getApplicationContext(), "fin d'envoi", Toast.LENGTH_SHORT).show(); 
    } 
} 

Тогда, когда я пытаюсь вызвать начать эту задачу, в моем onClick() методе, как это:

public void onClick(View v) { 

    // TODO Auto-generated method stub 
    ConnectServer cs = new ConnectServer(); 

    cs.execute((Void) null); 
} 

Это не работает. Я отлаживать его с затмением, я уверен, что ошибка приходят от этой линии:

cs.execute((Void)null); 

Я пытаюсь заменить его

cs.execute(); 

Но ошибка не будет устранена. Debbuger дает мне что-то вроде:

Thread [<10> AsyncTask #1] (Suspended (exception RuntimeException)) 
    ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1086 
    ThreadPoolExecutor$Worker.run() line: 561 
    Thread.run() line: 1096 
Thread [<12> AsyncTask #2] (Running) 

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

+0

Почему у вас есть строки для ip, в глобальной переменной вы равны никому. – TheBlueCat

+0

TheBluCat, я только что инициализировал IP, но это не проблема, becauz это сработало с этим, когда я удалил AsyncTask – sofo

ответ

0

Попробуйте это в классе ConnectServer:

@Override 
protected void onPostExecute(Void result) { 
    Toast.makeText(getApplicationContext(), "fin d'envoi", >Toast.LENGTH_SHORT).show(); 
} 

Попробуйте в деятельности:

@Override 
public void onClick(View v) { 
    ConnectServer cs = new ConnectServer(); 
    cs.execute(); 
} 
+0

Я уже пробовал это! "cs.execute();" не работает. – sofo

+0

Я думаю, мне нужно уточнить, что метод onClick вызывается в потоке Actvivty, а не в ConnectServer – sofo

+0

Нет предложения plzzz? – sofo

0

, как выясняется, иногда просто Project->Clean.. в Eclipse, позволит решить проблему ..;)

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