gpt4 book ai didi

java - Android - 在 Activity 类 android.app.application 中找不到方法 playaudio(View)

转载 作者:行者123 更新时间:2023-12-01 23:18:57 28 4
gpt4 key购买 nike

我现在被阻止了几个小时,我正在尝试使用 xml onClick 属性处理 ListView 内的按钮单击。

这是我的 result.xml:

<?xml version="1.0" encoding="utf-8"?>

<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">

<TextView
android:id="@+id/url"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"/>

<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" />

<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" />

<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" />

<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" />

<ImageButton
android:id="@+id/download"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:src="@drawable/download" />

</RelativeLayout>

这是我的 search.java 文件

 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 && 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<String, Void, String> {
@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<Map<String, String>> groupData = new ArrayList<Map<String, String>>();

// -- list item hash re-used
Map<String, String> group;

//create audio json array
JSONArray audios = jsonobject.getJSONArray("audio");

for (int i = 0; i < 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<String, String>();

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);
}


}

这是我得到的错误

 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'

我尝试将 playAudio 方法放在 Search 类、HttpAsyncTask 和 MainActivity 类中,但没有任何效果,我仍然遇到相同的错误。

我还想知道为什么引用 android.app.application 类时出现错误,因为布局来自“搜索”> HttpAsyncTask

也许这就是错误的原因,但是我能做些什么来解决它呢?

非常感谢:)

最佳答案

这里

mContext = getApplicationContext();

意味着您正在使用Application作为Context(通常不是一个好主意。)

这里

SimpleAdapter adapter = new SimpleAdapter(mContext , groupData, R.layout.result

您在此适配器中使用该应用程序上下文,这意味着该上下文用于扩充 result.xml 布局。

结果是 onClick 参数在 Application 类中搜索 playAudio

最后,public void playAudio(View v) { 不在您的 Activity 中,而是在您的 AsyncTask

为了解决这个问题,

  • mContext = this; 另外,不要将其设置为静态
  • Activity中移动playAudio
  • 瞧!

关于java - Android - 在 Activity 类 android.app.application 中找不到方法 playaudio(View),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20832685/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com