Есть класс MainActivity реализует интерфейс UpdateView
public interface UpdateView {
void update(String name, String lastname);
}
public class MainActivity extends AppCompatActivity implements UpdateView {
@BindView(R2.id.first_name) TextView firstName;
@BindView(R.id.last_name) TextView lastName;
private User userInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
User userInfo = new User();
userInfo.init(getApplicationContext());
try {
Log.d("User info ", userInfo.getFirstName());
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void update(String name, String lastname) {
firstName.setText(name);
}
}
Класс User в которым данные берется из API. Для получения данных из сети использую библиотеку okHttp (асинхронный вызов).
public class User {
private String firstName;
private String lastName;
private UpdateView updateView;
public void init(Context context){
getDataFromAPI();
}
private void getDataFromAPI(){
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://api.vk.com/method/users.get").newBuilder();
urlBuilder.addQueryParameter("user_ids", "210700286");
urlBuilder.addQueryParameter( "fields", "bdate");
urlBuilder.addQueryParameter("v", "5.60");
String url = urlBuilder.build().toString();
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//Log.d("Response", response.body().string());
parseUserInfo(response.body().string());
updateView = new MainActivity();
updateView.update(firstName, lastName);
}
});
}
private void parseUserInfo(String string) {
try {
JSONObject jsonObj = new JSONObject(string);
JSONArray response = jsonObj.getJSONArray("response");
JSONObject userObject = response.getJSONObject(0);
String name = userObject.getString("first_name");
String lastName = userObject.getString("last_name");
//Log.d("2", name + " " + lastName);
this.firstName = name;
this.lastName = lastName;
} catch (JSONException e) {
e.printStackTrace();
}
}}
Получаю рантайме
FATAL EXCEPTION: OkHttp Dispatcher
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Как обновить TextView когда данные успешно получены (onResponse())?
Если запрос данных из API перенесу из User в MainActivity и внем запущу
public void onResponse(Call call, Response response) throws IOException {
//Log.d("Response", response.body().string());
parseUserInfo(response.body().string());
runOnUiThread(new Runnable() {
@Override
public void run() {
firstName.setText(....);
}
});
}
работает.
Activity может создавать только операционная система. В вашем коде new MainActivity()
принципиально неверно. А второй вариант, когда запрос происходит из уже созданной MainActiivty
, верен.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Захотелось в игру сделать секундомерЯ представляю это так: системное время идет и я в соответствии с ним выставляю изображения цифр
Всем доброе время суток! Как я знаю, при создании таблицы есть возможность перегрузкой отправить двумерный массив данных и одномерный с названиями...
Вобщем, есть игра типа "Викторина" и естественно нужно было подключить рейтинг, подключил рейтинг Google Play, так вот незадача в том, что рейтинг...