2017-03-16 64 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