2013-07-10 6 views
1

Я в настоящее время использую Koush/ion - https://github.com/koush/ion библиотека для моего приложения.Настройка данных на глобальную переменную

У меня есть глобальная переменная создана public static String content;

И с помощью этого метода в AsyncTask

Ion.with(MainActivity.this, "http://google.com").asString().setCallback(new FutureCallback<String>() { 

@Override 

public void onCompleted(Exception e, String result) { 


MainActivity.content = result.toString(); 

     } 
    }); 

Однако, когда я пытаюсь получить доступ к переменной контента из AsyncTask, я понял, что это нулевой , Я установил глобальную переменную и установил для нее данные. Что-то не так с этим?

EDIT: Полный сценарий

package dev.tst.app 

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.koushikdutta.async.future.FutureCallback; 
import com.koushikdutta.ion.Ion; 

public class MainActivity extends Activity { 
    public static volatile String content; 
    TextView tv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tv = (TextView) findViewById(R.id.tv); 
     new LongOperation().execute(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    private class LongOperation extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      Ion.with(MainActivity.this, "http://google.com").asString() 
        .setCallback(new FutureCallback<String>() { 
         @Override 
         public void onCompleted(Exception e, String result) { 
          MainActivity.content = result.toString(); 
          Log.e("Count", content.length() + "."); 
         } 
        }); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      MainActivity.this.runOnUiThread(new Runnable() { 
       public void run() { 
        Toast.makeText(MainActivity.this, MainActivity.content, 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
    } 
} 
+0

Пожалуйста, проверьте, если 'onPostExecute()' выполняется перед 'OnCompleted()'. – Aprian

+0

Могу ли я спросить, как я могу убедиться, что 'onPostExecute()' выполняется ПОСЛЕ 'onCompleted()' выполняется? – MrYanDao

+0

Я не думаю, что вам нужна «AsyncTask». Попробуйте заменить 'new LongOperation(). Execute();' с 'Ion.with (...)' в вашем 'onCreate()' методе. – Aprian

ответ

0

Попытка сделать переменную как летучий:

public static volatile String content; 
+0

Не работает:/Будет обновлен пост с полным скриптом. – MrYanDao

+0

Вы уверены, что результат не пуст? –

+0

Да. В этой строке 'MainActivity.content = result.toString(); Log.e (" Count ", content.length() +". ");' Он возвращает результат int, а не null, сообщая мне, что были данные в переменное содержимое. Однако из этого метода содержимое возвращается к нулевому значению. – MrYanDao

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