1

結果文字列が null の場合、asyncTask をキャンセルしたい。(ログインアクティビティでユーザーからユーザー名とパスワードを取得します。このユーザー名とパスワードがデータベースに存在しない場合、asyncTask はキャンセルして同じタスクを開始する準備をする必要があります。)何かを読んで適用しましたが、適用しませんでした。走らない。ここに私の AsyncTask があります:

class ProductConnect extends AsyncTask<Boolean, String, String> {

   public AsyncResponse delegate=null;

   private Activity activity;


   public void MyAsyncTask(Activity activity) {
        this.activity = activity;
    }


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

        String result = null;

        StringBuilder sb = new StringBuilder();

        try {

            // http post
            HttpClient httpclient = new DefaultHttpClient();

            HttpGet httppost = new HttpGet( "http://191.165.2.235/getProducts.php?login=1&user_name="+UserName+"&user_pass="+Password);



            HttpResponse response = httpclient.execute(httppost);

            if (response.getStatusLine().getStatusCode() != 200) {
                Log.d("MyApp", "Server encountered an error");
            }

          BufferedReader reader = new BufferedReader(
                    new InputStreamReader(
                            response.getEntity().getContent(), "UTF8"));  



            sb = new StringBuilder();

            sb.append(reader.readLine() + "\n");

            if(reader.readLine() == null){

                asyncTask.cancel(true);
            }

            String line = null;

            while ((line = reader.readLine()) != null) {

                sb.append(line + "\n");

                if (isCancelled()) break;
            }


            result = sb.toString();

            Log.d("test", result);

        } 
        catch (Exception e) {

            Log.e("log_tag", "Error converting result " + e.toString());

        }

        return result;
    }




    @Override
    protected void onPostExecute(String result) {

        Intent passValue=new Intent(MainActivity.this, second.class);



        try {

            JSONArray jArray = new JSONArray(result);
            JSONObject json_data;
            for (int i = 0; i < jArray.length(); i++) {
                json_data = jArray.getJSONObject(i);

                t = json_data.getString("name");
                names.add(t);                                             

                latitude=json_data.getString("lat");
                lats.add(latitude);                                       

                longtitude=json_data.getString("lon");
                longts.add(longtitude);                                   

            }


            passValue.putStringArrayListExtra("latitudes", (ArrayList<String>) lats);

            passValue.putStringArrayListExtra("veri", (ArrayList<String>) names);

            passValue.putStringArrayListExtra("longtitudes", (ArrayList<String>) longts);

            startActivity(passValue);   

        } catch (JSONException e1) {
            e1.printStackTrace();
        } catch (ParseException e1) {
            e1.printStackTrace();
        }
        super.onPostExecute(result);
    }

     protected void onPreExecute()                          {
            super.onPreExecute();
            ProgressDialog pd = new ProgressDialog(MainActivity.this);
            pd.setTitle("Lütfen Bekleyiniz");
            pd.setMessage("Authenticating..");
            pd.show();

                                                                     }
}

どのように道をたどればよいですか?どの方法を使用すればよいですか?

4

3 に答える 3

0

AsyncTask は主に、Web サービスの呼び出しなど、バックグラウンド スレッドで実行したい操作に使用されます。このシナリオでは、Web サービスを介してユーザー名とパスワードを保存するために AsyncTask を使用しています。したがって、AsyncTask を実行する前に、ユーザー名とパスワードの両方の編集テキストを検証して null チェックする必要があります。すべて問題なく、定義されたパスワード ポリシーに従ってパスワードを取得したら、httppost にこれら 2 つの値を指定して AsyncTask を呼び出します。

于 2013-10-09T10:36:39.747 に答える
0

ここにはロジックがありません。データが null でない場合にのみ Async タスクを呼び出す必要があります。このような

b.setOnClickListener(new OnClickListener() {

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

            EditText username=(EditText)findViewById(R.id.editText2);

            String UserName=username.getText().toString().trim();

            EditText password=(EditText)findViewById(R.id.editText1);
            String Password=password.getText().toString().trim(); 

            if (UserName.length()>0&& Password.length()>0) {
                asyncTask.execute(true); } 
        }
    });
于 2013-10-09T09:07:33.367 に答える