我必须开发一个电子商务移动应用程序.为了将产品展示到应用程序中,我必须使用指向移动网站的webview.与每个产品相关联的是"添加到购物篮"按钮.此按钮也是移动网站的一个元素.在移动应用程序的标签栏中(而不是在webview中),有一个篮子的图标,其中包含篮子的元素数量.webview如何知道用户已将一个或多个元素添加到购物篮并将此信息发送到可以更新购物篮图标的原生移动应用程序?
int delay = 1000; // delay for 1 sec.
int period = 10000; // repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
displayData(); // display the data
}
}, delay, period);
Run Code Online (Sandbox Code Playgroud)
和别的:
while(needToDisplayData)
{
displayData(); // display the data
Thread.sleep(10000); // sleep for 10 seconds
}
Run Code Online (Sandbox Code Playgroud)
它们都不起作用(应用程序强制关闭).我还可以尝试其他什么选择?
当用户在一个活动中单击按钮时,我需要处理一些数据,因此屏幕看起来像应用程序停止2-3秒.它并不是很多,但我想向用户提供一切正常的信息,IMO最好的方法是只有在处理数据时才能看到的进度条.
我找到了ProgressBar的代码,它看起来像这样:
<ProgressBar
android:id="@+id/loadingdata_progress"
style="?android:attr/progressBarStyle"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/fin2_note"
android:layout_centerHorizontal="true"
android:indeterminate="true"
android:visibility="invisible" />
Run Code Online (Sandbox Code Playgroud)
并将其插入我的布局中间.
并尝试进度条的工作原理,我把这个代码
loadingimage= (ProgressBar) findViewById(R.id.loadingdata_progress);
loadingimage.setVisibility(View.VISIBLE);
进入onCreate方法,一切都很好.然后我重新创建代码以仅在处理数据时显示此进度条.
单击后,用户调用此方法
public void fin2_clickOnFinalization(View v)
{
loadingimage= (ProgressBar) findViewById(R.id.loadingdata_progress);
loadingimage.setVisibility(View.VISIBLE);
// code where data is processing
loadingimage.setVisibility(View.INVISIBLE);
}
Run Code Online (Sandbox Code Playgroud)
并且屏幕上没有任何内容.我不知道哪里出错了.如果我通过id找到了进度条,对我来说很奇怪,我可以在onCreate方法中控制它,但是在onclick方法中它不受我的控制.
得到一个错误:android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触摸它的视图。
我真的不知道为什么。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button generate = (Button) findViewById(R.id.gen);
final TextView dice1 = (TextView) findViewById(R.id.dice1);
final TextView dice2 = (TextView) findViewById(R.id.dice2);
final TextView dice3 = (TextView) findViewById(R.id.dice3);
generate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dice1.setText(" ");
dice2.setText(" ");
dice3.setText(" ");
Thread thread = new Thread()
{
@Override
public void run() {
try {
while(true) {
sleep(2000);
setText("lol", "lol", "lol");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
});
}
public …Run Code Online (Sandbox Code Playgroud) 我对这个类有一个例外:"只有创建视图层次结构的原始线程才能触及它的视图".
我知道这可能是我使用异步的事实,但我是android dev中的新手,我甚至没有安排它甚至在Stackoverflow上阅读其他案例.欢迎帮助!
我的课:
package com.test.example;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class ShopsActivity extends Activity {
private ProgressDialog pDialog;
// URL to get contacts JSON
private static String url = "mywebserviceurl";
// JSON Node names
private static final String TAG_NAME = "shop_name";
private static …Run Code Online (Sandbox Code Playgroud) 在我的Android应用程序中,我正在使用Timer schedule.but得到Timer-0致命异常如下所示.我可以删除它.我还提到下面的代码 -
01-28 13:44:41.142: E/AndroidRuntime(1307): FATAL EXCEPTION: Timer-0
01-28 13:44:41.142: E/AndroidRuntime(1307):android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
01-28 13:44:41.142: E/AndroidRuntime(1307): at android.view.ViewRoot.checkThread(ViewRoot.java:2932)
01-28 13:44:41.142: E/AndroidRuntime(1307): at android.view.ViewRoot.invalidateChild(ViewRoot.java:642)
01-28 13:44:41.142: E/AndroidRuntime(1307): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:668)
01-28 13:44:41.142: E/AndroidRuntime(1307): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
01-28 13:44:41.142: E/AndroidRuntime(1307): at android.view.View.invalidate(View.java:5279)
01-28 13:44:41.142: E/AndroidRuntime(1307): at android.view.View.setBackgroundDrawable(View.java:7626)
01-28 13:44:41.142: E/AndroidRuntime(1307): at android.view.View.setBackgroundResource(View.java:7535)
01-28 13:44:41.142: E/AndroidRuntime(1307): at com.example.iqtest.PlayGame$1.run(PlayGame.java:61)
01-28 13:44:41.142: E/AndroidRuntime(1307): at java.util.Timer$TimerImpl.run(Timer.java:284)
Run Code Online (Sandbox Code Playgroud)
和代码是 -
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated …Run Code Online (Sandbox Code Playgroud) 我全局声明了我的TextView和timer_count:
TextView txMp3Prog;
int timer_count=0;
Run Code Online (Sandbox Code Playgroud)
在onCreate()我做了
txMp3Prog = (TextView)findViewById(R.id.txMp3Prog);
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取歌曲的持续时间并将文本设置如下
txMp3Prog.setText("00:0"+String.valueOf(timer_count));
Run Code Online (Sandbox Code Playgroud)
文本在此处设置
@Override
public void run() {
// TODO Auto-generated method stub
int currentPosition= 0;
int total = mp.getDuration();
while (mp!=null && currentPosition<total) {
try {
Thread.sleep(1000);
currentPosition= mp.getCurrentPosition();
} catch (InterruptedException e) {
return;
} catch (Exception e) {
return;
}
sbMusicProgress.setProgress(currentPosition);
timer_count++;
System.out.println( "Current position: "+timer_count);
txMp3Prog.setText("00:0"+String.valueOf(timer_count));
String currenttext = String.valueOf(currentPosition);
String songDuration = currenttext.substring(0, currenttext.length() / 2);
}
Run Code Online (Sandbox Code Playgroud)
但是当我播放一首歌时,我会收到以下错误日志:
07-02 11:25:36.575: E/AndroidRuntime(9418): FATAL EXCEPTION: Thread-13294
07-02 11:25:36.575: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该Movie对象播放一个gif ,它需要我调用该invalidate()方法.但是每当我调用此方法时,我都会收到以下错误:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题以及为什么会这样
你可以向我解释为什么我在刷新我的内容时会出现"致命异常:java.lang.UnsupportedOperationException"吗?在正常情况下,该功能应下载数据并为每一行创建一个回收器/卡...
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(false);
}
}, 2500);
new Thread(new Runnable(){
public void run(){
if(!isNetworkAvailable()){
Toast.makeText(getApplicationContext(), getResources().getString(R.string.nointernet), Toast.LENGTH_LONG).show();
return;
}
String str=getOnline("http://ni141767_1.vweb12.nitrado.net/vp.php");
String lines[] = str.split("\\<.*?\\>");
for (int i = 0; i < lines.length; i++) {
String content[] = lines[i].split("_");
String fach = content[5];
String lehrer = content[6];
Data dataToAdd = new Data(fach,lehrer);
mData.add(dataToAdd);
mAdapter.addItem(i, dataToAdd);
content = null;
}
}
}).start();
}
Run Code Online (Sandbox Code Playgroud)
Data.java:
public class Data {
public String …Run Code Online (Sandbox Code Playgroud) 简明:我正在寻找一种方法来从活动包含的片段更新活动中的视图.
详细说明:我有一个包含片段的片段和活动.活动具有导航抽屉,导航抽屉包含图像视图.我正在尝试的是当HTTP GET请求从片段返回响应时更新导航抽屉中的图像视图; 响应包含一个URL,指向图像加载器为导航抽屉中的图像视图解析图像的位置.
鉴于此,我试图从片段中获取活动中的视图实例,但我不知道该怎么做.甚至,我不确定我是否朝着正确的方向前进......
我将非常感谢任何意见.
问候,
android ×10
java ×2
adapter ×1
asynchronous ×1
invalidation ×1
ios ×1
json ×1
native-code ×1
text ×1
timer ×1
view ×1
webview ×1