ProgressDialog и AsyncTask дают мне несколько ошибок - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь использовать этот код:

  1. Когда я нажимаю на кнопку imageButton, выполняется метод goJournalArticles (View v):

    public void goJournalArticles(View v)
    {
    new DownoadJournalsFinishedAsync().execute();
    }
    

Затем я делаю некоторые вещи, и во время этого я показываю прогрессиДиалог:

class DownoadJournalsFinishedAsync extends AsyncTask<String, String, ArrayList<String>> {
    ProgressDialog dialog = new ProgressDialog(Journals.this);

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setMessage("Loading Articles. Please wait...");
        dialog.setCancelable(false);
        dialog.show();
    }

    @Override
    protected ArrayList<String> doInBackground(String... aurl) {
        String journalNameShort = localDatabase.getHistoryLastSelectedJournal();
        int journalId = localDatabase.getJournalIdFromNameShort(journalNameShort);
        ArrayList<String> result = new ArrayList<String>();

            try {
                infoCourrentIssue = serviceMDPI.JournalCurrentIssue(journalId);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            int issue =infoCourrentIssue.getIssue();
            int volume = infoCourrentIssue.getVolume();
            ArrayList<Article> articles = GetCurrentIssue(journalId,volume,issue);
            int size = articles.size();

            for (int i=0;i<size;i++)
            {
                result.add(Html.fromHtml(articles.get(i).getTitle()).toString());
            }
            return result;
    }

     @Override
     protected void onPostExecute(ArrayList<String> result) {
         //View v = findViewById(R.id.Articles);
            Intent myIntent = new Intent(getBaseContext(), JournalArticles.class);
            myIntent.putExtra("articlesTitle", result); 
            startActivityForResult(myIntent, 0);
            dialog.dismiss();
     }
 }

Но когда я пытаюсь открыть новое действие с намерением, я получаю эту ошибку:

03-05 12:08:47.724: E/AndroidRuntime(22249): FATAL EXCEPTION: main
03-05 12:08:47.724: E/AndroidRuntime(22249): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{milos.mdpi/milos.mdpi.JournalArticles}: java.lang.NullPointerException
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.os.Looper.loop(Looper.java:150)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.ActivityThread.main(ActivityThread.java:4389)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at java.lang.reflect.Method.invokeNative(Native Method)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at java.lang.reflect.Method.invoke(Method.java:507)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at dalvik.system.NativeStart.main(Native Method)
03-05 12:08:47.724: E/AndroidRuntime(22249): Caused by: java.lang.NullPointerException
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.Activity.findViewById(Activity.java:1732)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at milos.mdpi.JournalArticles.<init>(JournalArticles.java:13)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at java.lang.Class.newInstanceImpl(Native Method)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at java.lang.Class.newInstance(Class.java:1409)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.Instrumentation.newActivity(Instrumentation.java:1040)
03-05 12:08:47.724: E/AndroidRuntime(22249):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1777)
03-05 12:08:47.724: E/AndroidRuntime(22249):    ... 11 more

Ответы [ 6 ]

1 голос
/ 05 марта 2012

В вашем коде

@Override
protected void onPostExecute(ArrayList<String> result) {
     View v = findViewById(R.id.Articles);
     Intent myIntent = new Intent(v.getContext(), JournalArticles.class);
     myIntent.putExtra("articlesTitle", result); 
     startActivityForResult(myIntent, 0);
     dialog.dismiss();
 }

Эта строка View v = findViewById(R.id.Articles); вызывает NullPointerException

Итак, вместо этих двух строк

View v = findViewById(R.id.Articles);
Intent myIntent = new Intent(v.getContext(), JournalArticles.class);

просто используйте

Intent myIntent = new Intent(Journals.this, JournalArticles.class);

Обновление:

Начиная с вашего logcat NullPointerException находится в Номер строки журнала JournalArticles.java номер 13 .

ТАК, пожалуйста, отправьте соответствующий код для JournalArticles.java класса.

0 голосов
/ 05 марта 2012

Я нашел решение, проблема была на моем втором занятии.

0 голосов
/ 05 марта 2012

Я думаю, что вы должны закрыть диалоговое окно перед вызовом следующего действия.

dialog.dismiss();

Intent myIntent = new Intent(getBaseContext(), JournalArticles.class);
            myIntent.putExtra("articlesTitle", result); 
            startActivityForResult(myIntent, 0);
0 голосов
/ 05 марта 2012

Я думаю, что это исправит nullPionter

    @Override     
protected void onPostExecute(ArrayList<String> result) {         
 //View v = findViewById(R.id.Articles);            
 Intent myIntent = new Intent(Journals.this, JournalArticles.class);            
 myIntent.putExtra("articlesTitle", result);          
  startActivityForResult(myIntent, 0);           
 dialog.dismiss();      
} 
0 голосов
/ 05 марта 2012

попробуйте это-

class DownoadJournalsFinishedAsync extends AsyncTask<String, String, ArrayList<String>> {
ProgressDialog dialog;

@Override
protected void onPreExecute() {
    super.onPreExecute();
    dialog = new ProgressDialog(Journals.this);
    dialog.setMessage("Loading Articles. Please wait...");
    dialog.setCancelable(false);
    dialog.show();
}
0 голосов
/ 05 марта 2012

При первом взгляде на журналы выше, похоже, проблема в

 @Override     
 protected void onPostExecute(ArrayList<String> result) {         
 //View v = findViewById(R.id.Articles);            
 Intent myIntent = new Intent(getBaseContext(),JournalArticles.class);            
 myIntent.putExtra("articlesTitle", result);          
    startActivityForResult(myIntent, 0);           
  dialog.dismiss();      
} 

Надеюсь, это поможет.

...