こんにちは、私は aacplayer アプリを持っていますが、すべての接続を切断すると、wifi + モバイルデータを意味し、アプリを開こうとするとクラッシュし、アプリが開きません。メインアクティビティで次のようなメッセージをユーザーに表示する必要があります。接続がありません。もう一度お試しください。
私のアプリは次のように動作します:
リストビューがあり、xml から多くのラジオ局のデータをロードし、1 つをクリックすると aac プレーヤーが開き、正しく再生されます。また、サービスのストリーミングにも使用します。
アプリのクラッシュを回避するにはどうすればよいですか?
私の主な活動は次のとおりです。
public class Principal extends Activity {
protected TextView title;
protected ImageView icon;
static final String URL = "http://www.streaming507.com/estaciones.xml";
static final String KEY_ESTACION = "estacion";
static final String KEY_ID = "id";
static final String KEY_NOMBRE = "nombre";
static final String KEY_WEB = "web";
static final String KEY_SHOUTCAST = "shoutcast";
static final String KEY_MINIATURA = "miniatura";
static final String KEY_LOGO = "logo";
private static final int DIALOG_ALERT = 10;
public static Activity handleToClose;
ListView list;
LazyAdapter adapter;
private Button botonactualizar;
public void actualizar() {
title = (TextView) findViewById(R.id.title);
icon = (ImageView) findViewById(R.id.icon);
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL);
Document doc = parser.getDomElement(xml);
NodeList nl = doc.getElementsByTagName(KEY_ESTACION);
for (int i = 0; i < nl.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_NOMBRE, parser.getValue(e, KEY_NOMBRE));
map.put(KEY_WEB, parser.getValue(e, KEY_WEB));
map.put(KEY_SHOUTCAST, parser.getValue(e, KEY_SHOUTCAST));
map.put(KEY_MINIATURA, parser.getValue(e, KEY_MINIATURA));
map.put(KEY_LOGO, parser.getValue(e, KEY_LOGO));
songsList.add(map);
}
list = (ListView) findViewById(R.id.list);
adapter = new LazyAdapter(this, songsList);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String url = ((TextView) view.findViewById(R.id.shoutcast))
.getText().toString();
String logo = ((TextView) view.findViewById(R.id.logo))
.getText().toString();
try {
stopService(new Intent(view.getContext(), MyService.class));
} catch (Exception ex) {
}
Intent myIntent = new Intent(view.getContext(),
AACPlayerActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
myIntent.putExtra("URL", url);
myIntent.putExtra("LOGO", logo);
startActivity(myIntent);
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
R.layout.window_title);
handleToClose = this;
actualizar();
botonactualizar = (Button)findViewById(R.id.botonactualizar);
botonactualizar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View vw) {
actualizar();
Toast.makeText(Principal.this, "Lista de estaciones actualizada",
Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.layout.menu_opciones1, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_actualizar:
actualizar();
Toast.makeText(Principal.this, "Lista de estaciones actualizada",
Toast.LENGTH_SHORT).show();
return true;
case R.id.menu_salir:
showDialog(DIALOG_ALERT);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_ALERT:
Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Desea salir de la aplicacion?");
builder.setCancelable(true);
builder.setPositiveButton("Si", new OkOnClickListener());
builder.setNegativeButton("No", new CancelOnClickListener());
AlertDialog dialog = builder.create();
dialog.show();
}
return super.onCreateDialog(id);
}
private final class CancelOnClickListener implements
DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
}
}
private final class OkOnClickListener implements
DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
finish();
stopService(new Intent(Principal.this, MyService.class));
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
mNotificationManager.cancel(1);
}
}
}
接続マネージャーと呼ばれるものがあることは知っていますが、メイン アクティビティまたはストリーム サービスのどこにセットアップする必要があるのか わかりません。そのため、インターネットなしでアプリを開くと、メッセージが表示されます。再試行してください。次に更新ボタンを押すと、インターネットがオンになると、Web ページの xml からリストを読み込むことができます。
ありがとうございました。
編集:
インターネットに接続せずにアプリを開くと、このエラーが発生します
ava.net.UnknownHostException: Unable to resolve host "www.mydomain.com": No address associated with hostname
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.spoledge.aacplayer/com.spoledge.aacplayer.Principal}: java.lang.NullPointerException