2016-07-14 6 views
0

Android TV(sampleApp)でこの問題が発生しています。AndroidTv、XMLの問題からチャンネルを追加する(samleTvApp)

xmlファイルからストリーミングチャンネルを入力しています。最初に使用する一時ファイルを作成してから、サーバーからデータを取得し、そのデータから新しいxmlファイルを作成するために必要なすべての機能を実行するボタンを作成しました。

ボタンを押してファイルを作成した後、「チャンネルを追加」ボタンを押してチャンネルを追加しようとしましたが、使用されているファイルは新しいものではなく一時ファイルですxmlファイル。 NEW xmlファイルを使用するように、セットアップをもう一度やり直す必要があります。それは、メモリや何かに一時ファイルをキャッシュしているようで、チャンネルを追加するときに最初に使用します。アプリケーションが起動されると、内部ストレージファイルがありません(これは私が新しいxmlファイルを保存する場所です)ボタンを押す。それは代わりに、一時ファイルの新しいXMLファイルを使用していますので、

は、どのように私はこれが使用されている方法である代わりに、再セットアップを行う

+1

は、あなたが投稿できますXMLファイルを扱うアプリケーションのコードスニペット? – ULazdins

答えて

0

?(つまり、アプリの起動時に作成した)、それを作るのですか。基本的には、最初の起動時にチャンネルやプログラム(一時ファイル)を持たないXMLを作成し、それが何をしているのかを行います。次に、私の他のクラスを使用して、すべてのチャンネルとプログラムでNEW XMLファイルを作成します。それも動作し、ファイルが存在し、「チャンネルを追加」ボタンを押した後に、elseステートメントに進みます。しかし、関係なく、ボタンを押した後の最初の試行では、常に新しいファイルではなく一時ファイルが追加されます。セットアップをもう一度開始すると、新しいものが実行されます。

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

ボタンの機能は、私のrichSetupFragmentクラスである(私はそれのすべてを投稿する文句を言わないが、これらは、私はこのケースで最も重要だと思う部分です):

@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

問題はアクセス許可に関連していますか?あなたがアプリケーションを閉じた後に 'FILENAME'が存在しますか? –

関連する問題