2017-02-20 17 views
0

Я хочу загрузить изображение на сервер. Но мне нужно отправить ему имя пользователя от пользователя, который отправляет изображение.getApplicationContext() вне onCreate для загрузки изображения

У меня есть запись имя пользователя в SharedPreferences, так что я думаю, что я мог бы получить:

public class UploadRequest extends StringRequest { 
    private static final String REGISTER_REQUEST_URL = "http://160.128.0.10/up.php"; 
    private Map<String, String> params; 

    public UploadRequest(String image, String name, Response.Listener<String> listener){ 
     super(Method.POST, REGISTER_REQUEST_URL, listener, null); 

     SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE); 
// CANNOT RESOLVE SYMBOL getApplicationContext 
     String user = pref.getString("username", null); 

     params = new HashMap<>(); 
     params.put("image",image); 
     params.put("name",name); 
    } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 
} 

это не так? как я могу получить это имя пользователя?

+5

getApplicationContext() - это функция. Вы должны называть его объектом, который имеет эту функцию. Поэтому вам нужно позвонить в другой контекст. Реальное решение здесь состоит в том, что вам нужно передать Контекст вашему конструктору. –

+1

Вы можете использовать контекст как параметр конструктора. – pRaNaY

ответ

2

Что вам нужно сделать, просто передайте контекст основной деятельности этому классу своим конструктором. Таким образом, создать конструктор, как:

public UploadRequest(Context context, String image, String name, Response.Listener<String> listener){ 
    super(Method.POST, REGISTER_REQUEST_URL, listener, null); 

    SharedPreferences pref = context.getSharedPreferences("pref01", MODE_PRIVATE); 
// CANNOT RESOLVE SYMBOL getApplicationContext 
    String user = pref.getString("username", null); 

    params = new HashMap<>(); 
    params.put("image",image); 
    params.put("name",name); 
} 

И когда вы инициализировать его от вашей деятельности, передать this аргумент в контексте деятельности. Что-то вроде этого:

UploadRequest ur = new UploadRequest(this, OTHER_PARAMETERS_HERE); 

Как уже упоминалось в комментариях на других, ваш код не работает, потому что getApplicationContext() является функцией и вы можете вызвать его, если и только если объект имеет эта функция определена.

+0

большое спасибо –

3

getApplicationContext() можно вызывать только из подкласса Context, деятельность является одной из них, поэтому вы можете позвонить getApplicationContext() из своей деятельности.

Что вам нужно сделать, либо иметь глобальный Context, инициализированный в вашем классе приложений (не рекомендуется), или передать в Context в качестве параметра этому классу.

+0

спасибо !!!!!! –

1

Нельзя использовать getApplicationContext() так легко в любом месте в Android. поэтому ошибка отлично справляется с точки зрения Android.

Не используйте ссылки контекста в любом месте в основном в случае сетевых вызовов. Много раз контексты привязаны к Ui (Activity). Вы столкнетесь с трудными временами NullPointersExpetions.

Передайте свое имя пользователя в качестве параметра.

public class UploadRequest extends StringRequest { 
private static final String REGISTER_REQUEST_URL = "http://160.128.0.10/up.php"; 
private Map<String, String> params; 

public UploadRequest(String image, String usernName,String name, Response.Listener<String> listener){ 
    super(Method.POST, REGISTER_REQUEST_URL, listener, null); 

    SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE); 
// CANNOT RESOLVE SYMBOL getApplicationContext 
    String user = pref.getString("username", null); 

    params = new HashMap<>(); 
    params.put("image",image); 
    params.put("name",name); 
} 

@Override 
public Map<String, String> getParams() { 
    return params; 
} 
} 

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

  • Нет связанных вопросов^_^