2013-08-02 51 views
0

我想從AsyncTask返回一個值,我想與值contents進行比較,如果它們匹配,我想將值從AsyncTasnk發送到另一個意圖。我希望我解釋得很好。使用AsyncTasnk並返回值並與其他值比較

,這是代碼:

public class MainActivity extends Activity { 

    Button ButtonClick; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final TextView txt = (TextView) findViewById(R.id.textView1); 
     ButtonClick = (Button) findViewById(R.id.qrReader); 
     ButtonClick.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(
         "com.google.zxing.client.android.SCAN"); 
       startActivityForResult(intent, 0); 
       MainActivity.this.runOnUiThread(new Runnable() { 

        public void run() { 
         GetProduts GP = new GetProduts(); 
         txt.setText(GP.execute().toString()); 
        } 

       }); 
       // Intent i = new Intent(MainActivity.this,IndexActivity.class); 
       // startActivity(i); 

      } 
     }); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
      Intent intent) { 

     if (requestCode == 0) { 
      if (resultCode == RESULT_OK) { 
       final String contents = intent.getStringExtra("SCAN_RESULT"); 
       //I want to compare this value 

      } 
     } else if (resultCode == RESULT_CANCELED) { 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    public class GetProduts extends AsyncTask<ArrayList<Product>, Void, ArrayList<Product>> { 

     Product p; 
     final ArrayList<Product> productIdList = new ArrayList<Product>(); 

     @Override 
     protected ArrayList<Product> doInBackground(ArrayList<Product>... params) { 
      HttpClient httpclient = new DefaultHttpClient(); 
      GeneralConstans GC = new GeneralConstans(); 
      // Products will be stated in memory 
      HttpPost httpget = new HttpPost(GC.UrlProducts); 
      HttpResponse response; 
      String result = null; 
      try { 

       HttpContext ctx = new BasicHttpContext(); 

       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
         2); 
       httpget.setEntity(new UrlEncodedFormEntity(nameValuePairs, 
         "UTF-8")); 

       response = httpclient.execute(httpget, ctx); 
       HttpEntity resEntity = response.getEntity(); 

       if (resEntity != null) { 
        result = EntityUtils.toString(resEntity); 
        JSONArray arr = new JSONArray(result); 
        Gson gson = new Gson(); 
        if (arr.length() > 0) { 
         for (int j = 0; j < arr.length(); j++) { 
          p = gson.fromJson(arr.getString(j), Product.class); 
          productIdList.add(p); 
         } 

        } 

        return productIdList; 

       } 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (SocketException e) { 
       /* 
       * if (checkAbortStatus(e.getMessage()) == true) { 
       * handler.sendEmptyMessage(0); } 
       */ 
      } catch (IOException e) { 
       /* 
       * if (checkAbortStatus(e.getMessage()) == true) { 
       * handler.sendEmptyMessage(0); } 
       */ 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(ArrayList<Product> result) { 


      super.onPostExecute(result); 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

    } 
} 
+0

你試圖從'AsyncTa返回什麼值sk'? – Vikram

+0

productIdList,我想將productIdList與內容進行比較 – mstfdz

+0

請解釋如何比較'ArrayList'和'String'。 – Vikram

回答

1

聲明contentsButton ButtonClick;下爲:

String contents = ""; 

onActivityResult(),替換:

final String contents = intent.getStringExtra("SCAN_RESULT"); 

與:

contents = intent.getStringExtra("SCAN_RESULT"); 

result in onPostExecute(ArrayList<Product> result) is productIdList。改變你的onPostExecute()到:

@Override 
protected void onPostExecute(ArrayList<Product> result) { 
    super.onPostExecute(result); 

    if (result != null) { 
     for (int i = 0; i < result.size(); i++) { 
      if(result.get(i).toString().equals(contents) { 

       // Do something 

      } 
     } 
    } 
} 

此外,下面的不完全正確:

public void run() { 
    GetProduts GP = new GetProduts(); 
    txt.setText(GP.execute().toString()); 
} 

相反試試這個:

public void run() { 
    new GetProduts().execute(); 
} 

而且Button ButtonClick;下宣佈txtTextView txt;。現在,下面一行添加到您的onPostExecute()

txt.setText(....); // Replace .... with whatever you are trying to set. 

編輯1:

要開始另一項活動:

if(result.get(i).toString().equals(contents) { 

    // Change "OtherActivity" to the name of the activity you want to start 
    Intent newIntent = new Intent(MainActivity.this, OtherActivity.class); 
    newIntent.putExtra("My_Extra", result.get(i).toString()); 
    startActivity(newIntent); 

} 

要在其他活動獲取該字符串:

String extraString = getIntent().getStringExtra("My_Extra"); 
+0

感謝它做到了。現在,如果(result.get(i).toString()。equals(contents)是treu我想發送result.get(i).getId另一個intent我該怎麼做。 – mstfdz

+0

@mstfdz你的意思是你想開始另一項活動? – Vikram

+0

是的,我想開始另一項活動,並且想將「result.get(i)」發送給此活動 – mstfdz