1

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

しかし、エラーは解決しません。デバッガーは私に次のようなものを与えます:

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

4

2 に答える 2

0

Project->Clean..時々 、Eclipseだけで問題が解決することが判明した.. ;)

于 2012-12-12T16:25:36.150 に答える
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();
}
于 2012-06-04T18:04:02.557 に答える