2012-04-30 1 views
0

Мне нужно прочитать txt-файл в приложении Widget.Чтение файла txt в приложении Widget

Я создаю Txt во внешнем множестве деятельности с именем "NASTAVENI":

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.set); 
    editor=(EditText)findViewById(R.id.editor); 
    Button btn=(Button)findViewById(R.id.close);  
    btn.setOnClickListener(new Button.OnClickListener() { 
     public void onClick(View v) { 
      phoneNo = editor.getText().toString(); 
      finish(); 
     } 
    }); 
} 

public void onResume() { 
    super.onResume(); 

    try { 
     InputStream in=openFileInput("notes.txt"); 

     if (in!=null) { 
      InputStreamReader tmp=new InputStreamReader(in); 
      BufferedReader reader=new BufferedReader(tmp); 
      String str; 
      StringBuilder buf=new StringBuilder(); 

      while ((str = reader.readLine()) != null) { 
       buf.append(str+"\n"); 
      } 

      in.close(); 
      editor.setText(buf.toString()); 
     } 
    } 
    catch (java.io.FileNotFoundException e) { 

    } 
    catch (Throwable t) { 
     Toast 
      .makeText(this, "Exception: "+t.toString(), 2000) 
      .show(); 
    } 
} 

/*BACK**************************************************************************************************************************************/ 
public void onPause() { 
    super.onPause(); 

    try { 
     OutputStreamWriter out= 
       new OutputStreamWriter(openFileOutput("notes.txt", 0)); 

     out.write(editor.getText().toString()); 
     out.close();   
    } 
    catch (Throwable t) { 
     Toast 
      .makeText(this, "Exception: "+t.toString(), 2000) 
      .show(); 
    } 
} 

} 

Основной вид деятельности для приложения виджета с именем "Widget". Мне нужно прочитать txt-файл внешней активности «NASTAVENI» в этом упражнении «Виджет». Виджет активности и NASTAVENI находятся в одном пакете.

Этот код плох (ошибка java.lang.NullPointerException)

try { 
        InputStream in=openFileInput("notes.txt"); 


         InputStreamReader tmp=new InputStreamReader(in); 
         BufferedReader reader=new BufferedReader(tmp); 
         String str; 
         StringBuilder buf=new StringBuilder(); 

         while ((str = reader.readLine()) != null) { 
          buf.append(str+"\n"); 
         } 

         in.close(); 
         editor.setText(buf.toString()); 
         phoneNo = "77"; 

       } 
       catch (java.io.FileNotFoundException e) { 
        Toast toast=Toast.makeText(context, "Error FFE!", 1000); 
        toast.setGravity(Gravity.CENTER, 0, 0); 
        toast.show(); 
       } 
       catch (Throwable t) { 
        Toast toast=Toast.makeText(context, "Error T!" +t.toString(), 1000); 
        toast.setGravity(Gravity.CENTER, 0, 0); 
        toast.show(); 
} 

Извините за мой английский

+0

Если вы используете виджет не может быть активностью AppWidetProvider расширяет BroadcastReciever –

+0

нулевого указателя на какую линию и делает ваш файл будет создан и имеет правильные данные. –

ответ

0

Я не уверен, если вы хотите просто виджет, который считывает из TXT или вы хотите также "деятельность". Для чтения текстового файла, я использую, чтобы создать класс, который считывает файл и отдай мне то, что мне нужно, в зависимости, как это:

ShowLine(){ 
    try { 
       InputStream is = mContext.getAssets().open(monthFile); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); 
       // Skips lines 
       Log.w("day", String.valueOf(monthFile)); 
       for (int i = 0; i< DayMonth-1; i++) { 
        reader.readLine(); 
       } 
       Line = reader.readLine(); // read the line of the day 

       Name= Line.substring(Line.indexOf("*") + 1,Line.indexOf("-"));// I read between + and (my data is like: DAY * NAME -) 
       dia= ""+DayMonth+" de "+ monthNames[Month]+"" ; 
       Log.w("Name", String.valueOf(Name)); //to check that it works 

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

     } 

    } 

Для виджета, вам нужно создать класс, это виджет с:

public class Widget extends AppWidgetProvider { 
String dia = "1 Feb."; 
String Name= "Pavel"; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){ 

     mContext = context; 
     Resources res = mContext.getResources(); 

     ComponentName thisWidget = new ComponentName(context,Widget.class); 
     int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 

     for(int widgetIds: allWidgetIds){ 


      RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); 
      //Log.w("Widget test", String.valueOf(number)); 

      try{ 
       ShowLine(); 
       Log.w("Line 1", String.valueOf(Name)); 

      }catch (Exception e) { 
       Name= "error"; 
      } 

Я не уверен, что мой код работает отлично, вероятно, вы должны закончить его немного, потому что я не вставить целые функции. Но если у вас есть сомнения, это хороший учебник: vogella.com Я надеюсь, что это помогает :)

Смежные вопросы