2017-03-16 45 views
0

我想要使用其他語句,如果在OnPostExecute內部,所以當一個按鈕被點擊的API與數據下載,正確的標題(在這種情況下,本田或鈴木)從字符串源文件中獲取,他們都是放入一捆,並轉移到另一個活動。然後標題被用作我的DisplayDataActivity的標題,並將數據放入TextView中。 因此,我使用相同的活動來顯示我的數據,只是使用不同的標題和數據。 總共有20個按鈕,但是一旦我知道如何爲其中的兩個獲取id,我會將其擴展到其餘的其他按鈕。 但是我無法在OnPostExecute中傳遞我的按鈕ID(所以我可以根據點擊的按鈕ID選擇正確的else_if語句)。 有沒有辦法做到這一點? 我會非常感激任何幫助! !按鈕ID的內部OnPostExecute

更新的代碼:

public class MainActivity extends AppCompatActivity { 

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

} 

public class Wrap 
{ 
    public String dataPassedInOnClick; 
    public String resultData; 
} 

public class JSONTask extends AsyncTask<String, String, Wrap> { 
    private Context mContext; 
    private View rootView; 
    ProgressDialog pDialog; 
    JSONTask(Context mContext) { 
     this.mContext = mContext; 
    } 

    public JSONTask(Context context, View rootView){ 
     this.mContext=context; 
     this.rootView=rootView; 
    } 

    @Override 
    protected Wrap doInBackground(String... params) { 
     HttpURLConnection connection = null; 
     BufferedReader reader = null; 

     try { 
      URL url = new URL(params[0]); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.connect(); 

      InputStream stream = connection.getInputStream(); 
      reader = new BufferedReader(new InputStreamReader(stream)); 
      StringBuffer buffer = new StringBuffer(); 
      String line = ""; 

      while ((line = reader.readLine()) != null) { 
       buffer.append(line); 
      } 

      Wrap wrapper=new Wrap(); 
      wrapper.dataPassedInOnClick=params[0]; 
      wrapper.resultData=buffer.toString(); 

      return wrapper; 


     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (connection != null) { 
       connection.disconnect(); 
      } 
      try { 
       if (reader != null) { 
        reader.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPreExecute(){ 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Loading data..."); 
     pDialog.show(); 
    } 
    protected void onPostExecute(Wrap wrapResult) { 
     super.onPostExecute(wrapResult); 
     this.pDialog.dismiss(); 

     if (wrapResult.dataPassedInOnClick.contains("api_suzuki")) { 
      String activity_title = 
        getResources().getString(R.string.suzuki); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_honda")) { 
      String activity_title = 
        getResources().getString(R.string.honda); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_kawasaki")) { 
      String activity_title = 
        getResources().getString(R.string.kawasaki); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_triumph")) { 
      String activity_title = 
        getResources().getString(R.string.triumph); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_bmw")) { 
      String activity_title = 
        getResources().getString(R.string.bmw); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_hyousung")) { 
      String activity_title = 
        getResources().getString(R.string.hyousung); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_ducati")) { 
      String activity_title = 
        getResources().getString(R.string.ducati); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_harley")) { 
      String activity_title = 
        getResources().getString(R.string.harley); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_aprilia")) { 
      String activity_title = 
        getResources().getString(R.string.aprilia); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_ktm")) { 
      String activity_title = 
        getResources().getString(R.string.ktm); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_mv")) { 
      String activity_title = 
        getResources().getString(R.string.mv); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_bajaj")) { 
      String activity_title = 
        getResources().getString(R.string.bajaj); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("royal")) { 
      String activity_title = 
        getResources().getString(R.string.royal); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_hero")) { 
      String activity_title = 
        getResources().getString(R.string.hero); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     else if (wrapResult.dataPassedInOnClick.contains("api_indian")) { 
      String activity_title = 
        getResources().getString(R.string.indian); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
    } 
} 
public void onSuzuki(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_suzuki"); 
} 
public void onHonda(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_honda"); 
} 

public void onKawasaki(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_kawasaki"); 
} 
public void onTriumph(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_triumph"); 
} 

public void onBmw(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_bmw"); 
} 
public void onHyuosung(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_hyuosung"); 
} 
public void onDucati(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_ducati"); 
} 
public void onHarley(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_harley"); 
} 
public void onAprilia(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_aprilia"); 
} 
public void onKtm(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_ktm"); 
} 
public void onMv(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_mv"); 
} 
public void onBajaj(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_bajaj"); 
} 
public void onRoyal(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_royal"); 
} 
public void onHero(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_hero"); 
} 
public void onIndian(View view) { 
    JSONTask objJSONTask=new JSONTask(MainActivity.this); 
    objJSONTask.execute("api_indian"); 
} 

回答

1

你傳遞和獲取rootView在您onPostExecute任何情況下,當你試圖通過調用int id = view.getId();你實際上得到rootView每一個的ID來獲得ID時間,所以你必須通過每個按鈕的視圖或找出另一種方式來做到這一點。

你可以在這種情況下,做的是比較要傳遞的onClick方法的字符串,因爲你已經在傳遞一個不同的字符串爲每一種情況下,你已經從那裏叫你JSONTask方法知道,所以你不要不需要按下按鈕的視圖,因爲這會是多餘的。

試試這個:

public class Wrap 
{ 
    public String dataPassedInOnClick; 
    public String resultData; 
} 

public class JSONTask extends AsyncTask<String, String, Wrap> { 
    private Context mContext; 
    private View rootView; 
    ProgressDialog pDialog; 
    JSONTask(Context mContext) { 
     this.mContext = mContext; 
    } 

    public JSONTask(Context context, View rootView){ 
     this.mContext=context; 
     this.rootView=rootView; 
    } 

    @Override 
    protected Wrap doInBackground(String... params) { 
     HttpURLConnection connection = null; 
     BufferedReader reader = null; 

     try { 
      URL url = new URL(params[0]); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.connect(); 

      InputStream stream = connection.getInputStream(); 
      reader = new BufferedReader(new InputStreamReader(stream)); 
      StringBuffer buffer = new StringBuffer(); 
      String line = ""; 

      while ((line = reader.readLine()) != null) { 
       buffer.append(line); 
      } 

      Wrap wrapper=new Wrap(); 
      wrapper.dataPassedInOnClick=params[0]; 
      wrapper.resultData=buffer.toString(); 

      return wrapper; 


     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (connection != null) { 
       connection.disconnect(); 
      } 
      try { 
       if (reader != null) { 
        reader.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPreExecute(){ 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Loading data..."); 
     pDialog.show(); 
    } 
    protected void onPostExecute(Wrap wrapResult) { 
     super.onPostExecute(wrapResult); 
     this.pDialog.dismiss(); 

     if (wrapResult.dataPassedInOnClick.contains("Honda") || 
       wrapResult.dataPassedInOnClick.contains("honda")) { 
      String activity_title = 
        getResources().getString(R.string.Honda); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } else if (wrapResult.dataPassedInOnClick.contains("Suzuki") || 
       wrapResult.dataPassedInOnClick.contains("suzuki")) { 
      String activity_title = 
        getResources().getString(R.string.Suzuki); 
      Intent intent = new Intent(MainActivity.this, 
        DisplayDataActivity.class); 
      Bundle extras = new Bundle(); 
      extras.putString("title", activity_title); 
      extras.putString("JSON_Object", wrapResult.resultData); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
    } 
} 

我們必須定義一個類包裹,因爲doInBackground方法只能返回一個對象。

+0

嗨!我的按鈕執行API的,在OnPostExecute我想有一個else_if語句,將根據按鈕的ID按鈕(所以本田或鈴木)從字符串源文件中選擇正確的標題,然後它被放入一個捆綁並轉移到另一個活動。所以我的按鈕工作正常,將按鈕ID轉換爲OnPostExecuted時的問題。 :) – kamilsparrow

+0

你在OnPostExecute中傳遞哪個視圖? –

+0

這就是我問的問題。我如何訪問OnPostExecute中的按鈕ID。 – kamilsparrow