Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid - Could not find a method playaudio(View) in the activity class android.app.application
    primarykey
    data
    text
    <p>I am blocked for hours now, I am trying to handle a button click inside a listview using the xml onClick attribute.</p> <p>Here is my result.xml:</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"&gt; &lt;TextView android:id="@+id/url" android:layout_width="0dp" android:layout_height="0dp" android:visibility="gone"/&gt; &lt;TextView android:id="@+id/title" style="@android:style/TextAppearance.Large" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/play" android:singleLine="true" android:text="title" android:textColor="#000000" /&gt; &lt;TextView android:id="@+id/artist" style="@android:style/TextAppearance.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@id/title" android:layout_toLeftOf="@+id/play" android:singleLine="true" android:text="artist" android:textColor="#7D7D7D" /&gt; &lt;TextView android:id="@+id/duration" style="@android:style/TextAppearance.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/artist" android:layout_alignParentBottom="true" android:layout_below="@id/artist" android:layout_toLeftOf="@+id/play" android:singleLine="true" android:text="03:24" android:textColor="#7D7D7D" /&gt; &lt;ImageButton android:id="@+id/play" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_toLeftOf="@+id/download" android:src="@drawable/play" android:onClick="playAudio" /&gt; &lt;ImageButton android:id="@+id/download" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:src="@drawable/download" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>here is my search.java file</p> <pre><code> package com.example.testxxx; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.ListActivity; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; public class Search extends ListActivity { private TextView mTextView; private ListView mListView; private String query; private String queryencoded; private static Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); mTextView = (TextView) findViewById(R.id.text); mListView = (ListView) findViewById(android.R.id.list); mContext = getApplicationContext(); // Get the intent, verify the action and get the query Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { query = intent.getStringExtra(SearchManager.QUERY); try { queryencoded = URLEncoder.encode(query, "utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.w("myApp", "aaaaa"); Toast.makeText(Search.this, (query), Toast.LENGTH_LONG).show(); mTextView.setText("testing connexion"); if(isConnected()){ mTextView.setText("Loading..."); new HttpAsyncTask().execute("url to json"); } else{ mTextView.setBackgroundColor(0xffcc0000); mTextView.setText("You are NOT connected"); } } } public boolean isConnected(){ ConnectivityManager connMgr = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null &amp;&amp; networkInfo.isConnected()) return true; else return false; } public static String GET(String url){ InputStream inputStream = null; String result = ""; try { // create HttpClient HttpClient httpclient = new DefaultHttpClient(); // make GET request to the given URL HttpResponse httpResponse = httpclient.execute(new HttpGet(url)); // receive response as inputStream inputStream = httpResponse.getEntity().getContent(); // convert inputstream to string if(inputStream != null) result = convertInputStreamToString(inputStream); else result = "Did not work!"; } catch (Exception e) { Log.d("InputStream", e.getLocalizedMessage()); } return result; } private static String convertInputStreamToString(InputStream inputStream) throws IOException{ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = ""; String result = ""; while((line = bufferedReader.readLine()) != null) result += line; inputStream.close(); return result; } private class HttpAsyncTask extends AsyncTask&lt;String, Void, String&gt; { @Override protected String doInBackground(String... urls) { return GET(urls[0]); } // onPostExecute displays the results of the AsyncTask. @Override protected void onPostExecute(String result) { Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show(); try { JSONObject jsonobject = new JSONObject(result); mTextView.setText((String) jsonobject.get("count")); Integer count = Integer.parseInt((String) jsonobject.get("count")); if (count == 0) { // There are no results mTextView.setText(getString(R.string.no_results, query)); } else { // Display the number of results String countString = getResources().getQuantityString(R.plurals.search_results, count, new Object[] {count, query}); mTextView.setText(countString); // Specify the columns we want to display in the result String[] from = new String[] { "title", "artist", "duration", "url"}; // Specify the corresponding layout elements where we want the columns to go int[] to = new int[] { R.id.title, R.id.artist, R.id.duration, R.id.url}; // -- container for all of our list items List&lt;Map&lt;String, String&gt;&gt; groupData = new ArrayList&lt;Map&lt;String, String&gt;&gt;(); // -- list item hash re-used Map&lt;String, String&gt; group; //create audio json array JSONArray audios = jsonobject.getJSONArray("audio"); for (int i = 0; i &lt; audios.length(); i++) { JSONObject audio = audios.getJSONObject(i); //get info String title = audio.getString("title"); String artist = audio.getString("artist"); String duration = audio.getString("duration"); String durationformated = getDurationString(Integer.parseInt(duration)); String url = audio.getString("url"); // -- create record group = new HashMap&lt;String, String&gt;(); group.put( "title", title ); group.put( "artist", artist ); group.put( "duration", durationformated ); group.put( "url", url ); groupData.add(group); } SimpleAdapter adapter = new SimpleAdapter(mContext , groupData, R.layout.result, from, to ); setListAdapter( adapter ); } } catch (JSONException e) { // TODO Auto-generated catch block Log.w("myApp", e); } } public void playAudio(View v) { //get the row the clicked button is in LinearLayout vwParentRow = (LinearLayout)v.getParent(); TextView urlview = (TextView)vwParentRow.findViewById(R.id.url); String url = (String) urlview.getText(); Toast.makeText(mContext, (url), Toast.LENGTH_LONG).show(); } } private String getDurationString(int seconds) { int hours = seconds / 3600; int minutes = (seconds % 3600) / 60; seconds = seconds % 60; return twoDigitString(minutes) + ":" + twoDigitString(seconds); } private String twoDigitString(int number) { if (number == 0) { return "00"; } if (number / 10 == 0) { return "0" + number; } return String.valueOf(number); } } </code></pre> <p>this is the error I get</p> <pre><code> 02-10 20:00:31.995: E/AndroidRuntime(19483): java.lang.IllegalStateException: Could not find a method playAudio(View) in the activity class android.app.Application for onClick handler on view class android.widget.ImageButton with id 'play' </code></pre> <p>I have tried to place the playAudio method inside the Search class, inside the HttpAsyncTask and inside the MainActivity class, nothing is working I still have the same error.</p> <p>I'm also wondering why is the error referencing to the android.app.application class as the layout is from Search > HttpAsyncTask </p> <p>Maybe this is the cause of the error, but then what could I do to fix it?</p> <p>Thank you much :)</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload