2016-07-14 5 views
0

Ich habe dieses Problem mit Android TV (SampleApp).AndroidTv, Hinzufügen von Kanälen aus einem XML-Problem (samleTvApp)

Ich gebe Streaming-Kanäle aus einer XML-Datei ein. Ich erstelle eine temporäre Datei, die am Anfang verwendet werden soll, und dann habe ich eine Schaltfläche erstellt, die alle notwendigen Funktionen ausführt, um Daten vom Server abzurufen und die NEUE XML-Datei aus diesen Daten zu erstellen. All dies funktioniert, aber es gibt ein Problem:

Nach dem Drücken der Taste und Datei erstellt wird, versuche ich Kanäle hinzufügen, indem Sie auf "Kanäle hinzufügen" -Taste, aber die Datei, die verwendet wird, ist die temporäre Datei, nicht die neue XML-Datei. Damit es die NEUE XML-Datei verwendet, muss ich das Setup erneut ausführen, und dann funktioniert es einwandfrei. Es scheint, als ob es die temporäre Datei im Speicher oder etwas zwischenspeichert und erst beim Hinzufügen von Kanälen verwendet, da beim Start der App keine interne Speicherdatei vorhanden ist (hier speichere ich meine NEUE XML-Datei), die Datei wird erst danach erstellt die Taste drücken.

Wie kann ich es machen, damit es die neue XML-Datei statt die temporäre Datei verwendet (das während der App-Start erstellt) ?, stattdessen eine Neueinstellung tun

+1

könnten Sie einen Beitrag Code-Snippet Ihrer App, die sich mit XML-Dateien beschäftigt? – ULazdins

Antwort

0

Dies ist die Methode, die verwendet wird. Im Grunde erstellt es beim ersten Start eine XML-Datei ohne Kanäle oder Programme (die temporäre Datei) und tut, was es tun muss. Dann benutze ich meine andere Klasse und erstelle eine NEUE XML-Datei mit allen Kanälen und Programmen. Das funktioniert auch, die Datei existiert und es geht zur else-Anweisung, nachdem ich den "Add Channels" -Button gedrückt habe. Aber egal, beim ersten Versuch nach dem Drücken der Taste fügt es immer die temporäre Datei hinzu, anstatt die neue. Der neue wird nur ausgeführt, wenn ich das Setup erneut starte.

 public static XmlTvParser.TvListing getRichTvListings(Context context) { 
     context1 = context; 
     FileOutputStream fos; 

     try { 
      Boolean exists = context.getFileStreamPath(FILENAME).exists(); 
      if (exists == false){ 
       String string = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + 
         "<!DOCTYPE tv SYSTEM \"xmltv.dtd\">\n" + 
         "\n" + 
         "<tv>\n" + 
         "</tv>"; 

       Log.d(TAG,"Exists: FALSE"); 
       fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE); 
       fos.write(string.getBytes()); 
       fos.close(); 

       read = "file:" + context.getFilesDir().toString() + "/" + FILENAME ; 

       Uri catalogUri =Uri.parse(read); 

       if (sSampleTvListing != null) { 
        return sSampleTvListing; 
       } 

       try (InputStream inputStream = getInputStream(context, catalogUri)) { 
        sSampleTvListing = XmlTvParser.parse(inputStream); 
       } catch (IOException e) { 
        Log.e(TAG, "Error in fetching " + catalogUri, e); 
       } 

      } 
      else{ 
       Log.d(TAG,"Exists: TRUE"); 
       FileInputStream fis = context.openFileInput(FILENAME2); 
       StringBuilder builder = new StringBuilder(); 
       int inputChar; 
       while((inputChar = fis.read()) != -1) { 
        builder.append((char) inputChar); 
       } 
       String readFile = builder.toString(); 
       Log.d(TAG, "FileContent: " + readFile); 

       read = "file:" + context.getFilesDir().toString() + "/" + FILENAME2 ; 

       Uri catalogUri =Uri.parse(read); 

       if (sSampleTvListing != null) { 
        return sSampleTvListing; 
       } 

       try (InputStream inputStream = getInputStream(context, catalogUri)) { 
        sSampleTvListing = XmlTvParser.parse(inputStream); 
       } catch (IOException e) { 
        Log.e(TAG, "Error in fetching " + catalogUri, e); 
       } 

      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     return sSampleTvListing; 
    } 

Die die Schaltfläche Funktionen in meiner richSetupFragment Klasse sind (Ich werde nicht alles davon veröffentlichen, aber diese sind der Teil, ich denke, am wichtigsten sind in diesem Fall):

@Override 
     protected Boolean doInBackground(Uri... params) { 

      mTvListing = RichFeedUtil.getRichTvListings(getActivity()); 
      mPoster = fetchPoster(); 
      return true; 
     } 

@Override 
       public void onActionClicked(Action action) { 
        if (action.getId() == ACTION_ADD_CHANNELS) { 
         setupChannels(mInputId); 
        } else if (action.getId() == ACTION_CANCEL) { 
         getActivity().finish(); 
        } 
        else if (action.getId() == RETRIEVE_DATA) { 

         getChannelsFromServer(); 

         // Log.d(TAG,"List: " + list); 
        } 
private void setupChannels(String inputId) { 

     inputIdLocal= inputId; 
     if (mTvListing == null) { 
      onError(R.string.feed_error_message); 
      return; 
     } 
     TvContractUtils.updateChannels(getActivity(), inputId, mTvListing.channels); 
     SyncUtils.setUpPeriodicSync(getActivity(), inputId); 
     SyncUtils.requestSync(inputId, true); 
     mSyncRequested = true; 
     // Watch for sync state changes 
     if (mSyncObserverHandle == null) { 
      final int mask = ContentResolver.SYNC_OBSERVER_TYPE_PENDING | 
        ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE; 
      mSyncObserverHandle = ContentResolver.addStatusChangeListener(mask, 
        mSyncStatusObserver); 
     } 
    } 
+0

Betrifft das Problem Berechtigungen? Ist 'FILENAME' vorhanden, nachdem Sie die App geschlossen haben? –