- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名android学习者。我正在尝试获取当前位置的天气。我的应用程序中有一个“刷新”按钮,可以使用最新的天气详细信息更新 UI。当应用程序加载时,它会显示 0.0、0.0 纬度和经度的天气。当我点击“刷新”按钮时,它会显示我当前位置的天气。应用加载时如何获取当前位置的天气?我已经使用 Google Play 服务来获取当前位置。下面是我的代码。
MainActivity.java
public class MainActivity extends ActionBarActivity implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
public String apiKey;
public double latitude;
public double longitude;
public String forecastUrl;
public static final String TAG = MainActivity.class.getSimpleName();
private GoogleApiClient mGoogleApiClient;
protected Location mLastLocation;
public MainActivity() {
apiKey = “XXXXXXXXXX";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buildGoogleApiClient();
mRefreshImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getForecast();
}
});
getForecast();
}
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
protected void onResume() {
super.onResume();
mGoogleApiClient.connect();
}
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
private void getForecast() {
if (isNetworkAvailable()) {
forecastUrl = “http://www.forecastUrlGoesHere.com/" + apiKey + “/“ + latitude + "," + longitude;
toggleRefresh();
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(forecastUrl).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
toggleRefresh();
}
});
}
@Override
public void onResponse(Response response) throws IOException {
runOnUiThread(new Runnable() {
@Override
public void run() {
toggleRefresh();
}
});
try {
String jsonData = response.body().string();
if (response.isSuccessful()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
updateView(); //updates the screen ui
}
});
} else {
alertUserAboutError();
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
}
}
});
} else {
Toast.makeText(this, getString(R.string.network_error_message), Toast.LENGTH_LONG).show();
}
}
private void updateView() {
//code to update ui
}
private boolean isNetworkAvailable() {
//check network availability
}
private void alertUserAboutError() {
AlertDialogFragment dialog = new AlertDialogFragment();
dialog.show(getFragmentManager(), "error_dialog");
}
private void toggleRefresh() {
}
@Override
public void onConnected(Bundle bundle) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
latitude = mLastLocation.getLatitude();
longitude = mLastLocation.getLongitude();
Toast.makeText(this, latitude + " " + longitude, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, getString(R.string.no_location_detected), Toast.LENGTH_LONG).show();
}
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "Connection suspended");
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (connectionResult.hasResolution()) {
try {
connectionResult.startResolutionForResult(this, 9000);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
} else {
Log.i(TAG, "Connection failed, ERROR: " + connectionResult.getErrorCode());
}
}
}
最佳答案
有几种方法可以获得预期的结果。让我写一下其中一个的步骤:
a) 使用 ProgressDialog 并在 onCreate 中启动它
b) 将 getForecast() 从 onCreate 移出
c) 在 onConnected 方法中,一旦纬度和经度可用,请检查 ProgressDialog 是否仍然可见。如果是,请关闭此对话框并调用 getForecast
进度对话框链接 http://developer.android.com/reference/android/app/ProgressDialog.html
关于java - 使用 runOnUiThread 获取当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30404898/
我在数据库处理程序中构建了一个函数来使用 jsoup 从 sqlite + html 页面中获取数据。 如何设置 runOnUiThread 来处理数据库 habdler 函数中的线程数据? 或者我如
我收到了用户的错误报告,但我不知道我的代码出了什么问题。 logcat 是这样的: java.lang.NullPointerException at com.laurenswuyts.find.it
我想在我构建的应用程序小部件中发出 HTTP 请求。 这个想法是每隔几个小时,小部件就会通过发出 HTTP 请求来更新自己,并使用它的信息来更新它的 View 。 我已经尝试在 onUpdate 函数
事情是这样的:我正在使用 runOnUiThread() 方法从另一个类接收到来自另一部手机的消息时更改该类的 ImageView 。我通过使用 mainclass.runOnUiThread(new
我有 MainActivity(它扩展了 Activity)和 GameView(它扩展了 SurfaceView)。 MainActivity 有用于得分和剩余时间的 TextView。GameVi
我有一个 AsyncTask 正在运行,在这个线程中我启动了一个 runOnUiThread 来操作我的 View 。如果我关闭我的 AsyncTask,runOnUiThread 在我关闭我的 As
要从其他线程在主线程中运行某些内容,我们调用 runOnUiThread()。问题是,这个调用是同步的还是异步的? 如果我想在主线程中同步运行一些东西,我该怎么做? 最佳答案 您不能“在主线程中异步运
我的 android 应用程序存在内存泄漏。这是一个简单的音乐播放器。在屏幕底部,我有一个 TextView,用于显示耗时。它在下面的线程中更新。 每次我改变方向时,堆大小都会增加。通过查看 DDMS
如果考虑到效率,做following可以吗? new Runnable() { @Override public void run() { tr
我正在创建一个带有 ListView 的下载管理器,它将通过进度条显示当前下载的内容。我可以知道如何更新进度条吗? 例如。我有3节课。 "main.class"= 是一个 ListView 。 "mA
我有这个问题。我正在尝试从另一个线程更新我的 TextView 但它不允许我这样做。 我尝试了很多不同的解决方案,但似乎都没有帮助。在我的 while 循环代码中,一直打印“Started new l
我的应用程序应该连接到服务器并从中接收数据。但由于此错误而无法正常工作: android cannot resolve method runOnUiThread(anonymous java.lang
我正在开发一个使用第三方 tts 的应用程序,名为 flite。我正在做类似 tts 说一句话的事情。我想突出显示每个单词。为此,我设法从 tts 获得了单词级别的回调。工作流程是这样的——按下“说出
我一直在研究 runOnUiThread 方法。如果我只是在我的 Activity 中创建一个方法: public void Test() { runOnUiThread(new Runnab
我找到了 this这里有一个关于如何使用 runOnUiThread 方法的示例,但我不明白如何使用它。 我在主要 Activity 中设置了列表适配器 // Set a gobal refe
我有一个 fragment 叫做 MyRequestFragment ,其中包含一个 RecyclerView并将数据绑定(bind)到 RecyclerView使用 onBindViewHolder
我试图从我的后台线程在 UI 线程上抛出和警告对话框,但我遇到了 runOnUiThread 未定义的问题。我已经尝试过 FindLocation.this.runOnUiThread 和 runOn
我有这段代码: public void updateOptionLists() { Log.d("UI", "Called update"); if (updating){
这个问题在这里已经有了答案: Accessing UI thread handler from a service (7 个回答) 关闭8年前。 我想创建一项服务,如果有任何未读的 SMS,则每 20
我试图在我的一项 Activity 的 onCreate() 方法期间显示进度对话框,在线程中完成填充屏幕的工作,然后关闭进度对话框。 这是我的 onCreateMethod() dialog = n
我是一名优秀的程序员,十分优秀!